-2

如果我有一个特定的值分配给一个实例变量,我如何定义一个方法来重新分配这个变量的值?当我在下面运行代码时rspec,我不断获得原始值。

class Test
 def name 
   @name = 'me'
 end

 def name=(input)
   @name = input
 end
end
4

3 回答 3

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"
于 2013-01-30T04:07:22.533 回答
1

因为您@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
于 2013-01-30T04:06:55.643 回答
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
于 2013-01-30T04:09:56.177 回答