Вопрос о области видимости переменной экземпляра Ruby

Я исхожу из C++ и JAVA, которые вместе с Scope бывают либо глобальными, либо локальными.

Сейчас я изучаю ruby-on-rails, а ruby ​​бывает локальным, инстансным и глобальным. Я никогда не слышал об instance до сих пор.

С рельсами или без, как понимать и использовать переменную экземпляра?

Global = Variable across all objects share
Instance = Variable inside of the object
Local = Variable inside of the object

Я думаю, что я получаю instance и local как бы смешанные вместе.

@ham
ham

Это две разные переменные, верно? Иногда я путаюсь в Rails, потому что они взаимозаменяемо используют такие вещи, как @something и :something. Почему это?

Поскольку я использую фреймворк rails, все, что я понимаю под переменной экземпляра, — это то, что доступно представлению.

Может ли кто-нибудь прояснить эти переменные?


person RoR    schedule 17.09.2010    source источник


Ответы (2)


Переменная экземпляра в Ruby похожа на переменную в Java и является частью состояния объекта:

class MyObject
  def set_x(x)
    @x = x
  end

  def get_x
    @x
  end
end

Эквивалентный код Java:

class MyObject {
    private Object x;

    void setX(Object x) {
        this.x = x;
    }

    Object getX() {
        return x;
    }
}

А локальная переменная — это просто переменная, доступная только внутри этого конкретного метода:

def doIt 
    x = 3;
    # x not accessible from outside of doIt
    puts x
end

void doIt() {
    int x = 3;
    // same in Java
    System.out.println(x);
}

редактировать
Что вы подразумеваете под состоянием объекта?

MyObject o = new MyObject();
o.setX(3);
// integer 3 is now stored in variable 'x' of object 'o'
// I can return any time later and get that value back by 'o.getX()'
person Nikita Rybak    schedule 17.09.2010
comment
Что вы подразумеваете под состоянием объекта? - person RoR; 17.09.2010

Те, у кого есть двоеточие (:something), являются символами.

http://glu.ttono.us/articles/2005/08/19/understanding-ruby-symbols

person Namek    schedule 17.09.2010
comment
Но я сказал, что эти :symbols НЕ являются тем, о чем он спрашивает (переменные) - person Namek; 19.09.2010