instance variable(实例变量),除了有个明显的特性是@符号在变量名之前外,还有一个是 spring into life the first time they are assigned to (第一次给它赋值的时候它才会存在)
class Hello
def create_some_state
@hello = "hello"
end
end
h = Hello.new
p h.instance_variables
h.create_some_state
p h.instance_variables #列出所有的实例变量
Output: [] ["@hello"]
你还可以用 initialize 方法来初始化实例变量
class Hello
def initialize(val)
@hello = val
end
end
obj = Hello.new(1)
p obj.instance_variables
还有一种方法是用 Module 方法 attr_accessor (read/write), attr_writer(write), attr_reader (read)
class Hello
attr_accessor :hello
end
h = Hello.new
p h.instance_variables
h.hello = "hello"
p h.instance_variables
# Output
[]
["@hello"]
注意:实例变量还是没有生成,直到给它赋值。
原文: http://stackoverflow.com/questions/826734/when-do-ruby-instance-variables-get-set