如果我有一个特定的值分配给一个实例变量,我如何定义一个方法来重新分配这个变量的值?当我在下面运行代码时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