@@ var - это переменная класса , она распределяется между классом и всеми экземплярами этого класса. Вы можете получить доступ к этой переменной из методов класса и из методов экземпляра.
class C
@@a = 1
def self.m1 # define class method (this is similar to def C.m1, because self will evaluate to C in this context)
@@a
end
def m2 # define instance method
@@a
end
end
C.m1 # => 1
C.new.m2 # => 1
@ var - это переменная экземпляра класса . Обычно вы можете получить доступ к этой переменной экземпляра из методов класса.
class C
@a = 1
def self.m1
@a
end
def m2
# no direct access to @a because in this context @a will refer to regular instance variable, not instance variable of an object that represent class C
end
end
C.m1 # => 1
Эти переменные могут сбивать с толку, и вы всегда должны знать контекст, в котором вы определяете переменную экземпляра @...
- она может быть определена в экземпляре объекта, который представляет класс, или может быть экземпляром обычного объекта.