, как говорит название,Рубин новичок, в чем разница между @var и @@ варом в классе
чем разница между @var
и @@var
в определении класса? Кроме того, в чем разница между self.mymethod
и mymethod
в определении метода?
, как говорит название,Рубин новичок, в чем разница между @var и @@ варом в классе
чем разница между @var
и @@var
в определении класса? Кроме того, в чем разница между self.mymethod
и mymethod
в определении метода?
самоуправления всегда относится к текущему object.Check следующим Eg: -
class Test
def test
puts "At the instance level, self is #{self}"
end
def self.test
puts "At the class level, self is #{self}"
end
end
Test.test
#=> At the class level, self is Test
Test.new.test
#=> At the instance level, self is #<Test:0x28190>
объектные переменные названы так потому, что они имеют объем в пределах, и связаны , то текущее object.an объект переменная, затем доступна из любого другого метода внутри этого объекта.
Переменные класса особенно полезны для хранения информации, относящейся ко всем объектам определенного класса.
@@ 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
Эти переменные могут быть запутанным, и вы всегда должны знать контекст, в котором вы определяете экземпляр переменной @...
- это может быть определено в экземпляре объекта, которые представляют собой класс или может быть экземпляром объекта регулярного.
В интуитивных терминах экземпляры vars используются для отслеживания состояния каждого объекта. С другой стороны, переменные класса используются для отслеживания состояния всех экземпляров класса. Например. Вы можете использовать @@ подсчитывать, чтобы следить за количеством этого класса объектов, которые были реализованным, например, так:
class User
@@count = 0
attr_reader :name
def initialize(name)
@@count += 1
@name = name
end
end
User.count дает число пользователей, которые были экземпляры до сих пор. user = User.new('Peter')
увеличивает User.count на один и user.name
возвращает Peter.