设置实例变量

时间:2013-01-30 04:00:47

标签: ruby

如果我为实例变量分配了特定值,如何定义重新分配此变量值的方法?当我在rspec中运行下面的代码时,我会继续获取原始值。

class Test
 def name 
   @name = 'me'
 end

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

3 个答案:

答案 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