如果我有一个特定的值分配给一个实例变量,我如何定义一个方法来重新分配这个变量的值?当我在下面运行代码时rspec
,我不断获得原始值。
class Test
def name
@name = 'me'
end
def name=(input)
@name = input
end
end
如果我有一个特定的值分配给一个实例变量,我如何定义一个方法来重新分配这个变量的值?当我在下面运行代码时rspec
,我不断获得原始值。
class Test
def name
@name = 'me'
end
def name=(input)
@name = input
end
end
def name
@name = 'me'
end
每次调用上述方法时,都会设置并@name
返回'me'
它。
相信你在找||=
运营商
def name
@name ||= 'me' # only set @name to 'me' if it is not already set
end
IMO,完成默认值的最佳方法@name
是:
class Test
attr_accessor :name
def initialize
@name = 'me'
end
end
例子:
t = Test.new
t.name
# => "me"
t.name = 'foo'
# => "foo"
t.name
# => "foo"
因为您@name
在 getter 中设置变量,所以您应该只返回它。像这样:
class Test
def name
@name
end
def name=(input)
@name = input
end
end
或者更简单地说,您应该只使用该attr_accessor
方法来声明 getter 和 setter 方法的样板版本。像这样:
class Test
attr_accessor :name
end
初始值应在构造方法中设置。
class Test
def initialize
@name = 'me'
end
def name
@name
end
def name=(input)
@name = input
end
end
您可以使用它attr_accessor
来简化代码:
class Test
attr_accessor :name
def initialize
@name = 'me'
end
end