如果我为实例变量分配了特定值,如何定义重新分配此变量值的方法?当我在rspec
中运行下面的代码时,我会继续获取原始值。
class Test
def name
@name = 'me'
end
def name=(input)
@name = input
end
end
答案 0 :(得分:2)
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"
答案 1 :(得分:1)
因为您在getter中设置了@name
变量,所以您应该只返回它。像这样:
class Test
def name
@name
end
def name=(input)
@name = input
end
end
或者更简单地说,您应该使用attr_accessor
方法来声明getter和setter方法的样板版本。像这样:
class Test
attr_accessor :name
end
答案 2 :(得分:1)
应该在构造函数方法中设置初始值。
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