我可以声明Ruby类成员吗?
在Java中,我可以声明一个类的公共成员,但在Ruby中我似乎不能这样做我可以声明Ruby类成员吗?,ruby,class,member,Ruby,Class,Member,在Java中,我可以声明一个类的公共成员,但在Ruby中我似乎不能这样做 class Person @a = 1 def hello() puts(@a) end end p = Person.new p.hello() #nil 为什么输出nil而不是1 class Person @a = 1 def hello() puts(@a) end end pr = Person.new pr.instance_variable_get(:@a) #
class Person
@a = 1
def hello()
puts(@a)
end
end
p = Person.new
p.hello()
#nil
为什么输出
nil
而不是1
class Person
@a = 1
def hello()
puts(@a)
end
end
pr = Person.new
pr.instance_variable_get(:@a) # => nil
现在见下文:-
class Person
def initialize(a)
@a=a
end
def hello()
puts(@a)
end
end
pr = Person.new(1)
pr.instance_variables # => [:@a]
Person.instance_variables # => []
pr.instance_variable_get(:@a) # => 1
pr.hello # => 1
实例变量的名称以@开头,其作用域仅限于自身引用的对象。两个不同的对象,即使它们属于同一个类,也允许它们的实例变量具有不同的值。从对象外部,实例变量不能被改变,甚至不能被观察(即,ruby的实例变量从来都不是公共的),除非程序员显式提供任何方法。与全局变量一样,实例变量在初始化之前具有nil值
现在看这里:-
class Person
@a = 1
def self.hello()
puts(@a)
end
end
Person.hello # => 1
Person.instance_variables # => [:@a]
Person.new.instance_variables # => []
因此,在本例中,@a是对象
Person
的实例变量,而不是Person
的实例。这里有非常好的提示-。,因为实例变量@a没有为实例pr
初始化
class Person
@a = 1
def hello()
puts(@a)
end
end
pr = Person.new
pr.instance_variable_get(:@a) # => nil
现在见下文:-
class Person
def initialize(a)
@a=a
end
def hello()
puts(@a)
end
end
pr = Person.new(1)
pr.instance_variables # => [:@a]
Person.instance_variables # => []
pr.instance_variable_get(:@a) # => 1
pr.hello # => 1
实例变量的名称以@开头,其作用域仅限于自身引用的对象。两个不同的对象,即使它们属于同一个类,也允许它们的实例变量具有不同的值。从对象外部,实例变量不能被改变,甚至不能被观察(即,ruby的实例变量从来都不是公共的),除非程序员显式提供任何方法。与全局变量一样,实例变量在初始化之前具有nil值
现在看这里:-
class Person
@a = 1
def self.hello()
puts(@a)
end
end
Person.hello # => 1
Person.instance_variables # => [:@a]
Person.new.instance_variables # => []
因此,在本例中,@a是对象
Person
的实例变量,不是Person
的实例。这里有很好的提示-。这里是对类和实例变量的一个很好的解释这里是对类和实例变量的一个很好的解释,这意味着我在声明时不能初始化实例变量?这意味着我在声明时不能初始化实例变量?