我的代码有一个类定义:
class Test
attr_accessor :state
@state = 4
def check_state
puts "state is #{@state}"
end
end
obj = Test.new
obj.check_state
没有实例变量值的输出。
但如果我在obj.check_state之前调用obj.state = 4,我会得到 "州是4"。
为什么?
感谢。
答案 0 :(得分:1)
在当前代码中,您在Test 类上定义了一个实例变量,而不是在Test的实例上定义。也就是说,您可以使用类方法访问它:
class Test
@state = 4
def self.state
@state
end
end
# Test.state
# => 4
但这不是你想要的;您不希望该值存在于您的类中,您希望它存在于您的类的每个实例中。要在类的实例上初始化实例变量,您应该提供一个构造函数:
class Test
attr_accessor :state
def initialize
@state = 4
end
def check_state
puts "state is #{@state}"
end
end
# Test.new.state
# => 4
答案 1 :(得分:-1)
类定义中的自变量(当前对象)是类对象本身而不是接收器对象。 self是receiver(obj),只在方法定义内部。
https://www.youtube.com/watch?v=X2sgQ38UDVY 在48分钟......
class Test
attr_accessor :state
puts self.inspect
@state = 4
def check_state
puts "state is #{@state}"
puts self.inspect
end
end
obj = Test.new
obj.state=4
obj.check_state