[英]Instance variables in Ruby
Ruby 1.9
我突然意识到我不了解如何在Ruby中定义和初始化实例变量。 它只能在特定的class
而根本不能从某个class
访问,因此,我不需要attr_accessor
或attr_reader
。
class MyClass
#how do I initialize it?
@my_var = 'some value'
def method1
#I need to do something with @my_var
puts @my_var
end
def method2
#I need to do something with @my_var
puts @my_var
end
end
a = MyClass.new
a.method1 #empty
a.method2 #empty
所以我发现还有另一种方法
class MyClass
#is this the only way to do it?
def initialize
@my_var = 555
end
def method1
#I need to do something with @my_var
puts @my_var
end
def method2
#I need to do something with @my_var
puts @my_var
end
end
a = MyClass.new
a.method1 #555; it's ok
a.method2 #555; it's ok
好吧,第二种方法正确吗?
每个类都有一个initialize()
方法,该方法的行为类似于其他语言中的构造函数,实例变量应在此处初始化:
class MyClass
def initialize
@my_var = 'some value'
end
# etc...
end
是的, initialize
是正确的方法。
但您也可以:
class MyClass
def method1
#I need to do something with @my_var
puts @my_var ||= 555
end
def method2=(x)
#I need to do something with @my_var
puts @my_var = x
end
end
#Test:
x = MyClass.new
x.method1 #555
x.method2= 44 #44
x.method1 #44
首次调用method1
时,它将初始化变量。
编辑:当您指定nil
时,它无法按预期工作
x = MyClass.new
x.method1 #555
x.method2= nil #nil
x.method1 #again 555
此版本效果更好:
class MyClass
def method1
@my_var = 555 unless defined? @my_var
puts @my_var
end
def method2=(x)
puts @my_var = x
end
end
x = MyClass.new
x.method1 #555
x.method2= nil #nil
x.method1 #keeps nil
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.