更改后的字符串插值更新

时间:2015-08-19 15:29:12

标签: ruby setter string-interpolation attr-accessor

我在插值字符串中有值,这些字符串引用如下数组:

attr_accessor :s, :gamespace

def initialize
  @s = [1,2,3]
  @gamespace = "#{@s[0]} | #{@s[1]} | #{@s[2]} "
end

当我更改@s的值时,它不会更新@gamespace的值。

我采取了另外一种方法:

def gamespace
  @gamespace = "#{@s[0]} | #{@s[1]} | #{@s[2]}"
end

然后我在对@s进行任何更改后调用它。

有没有办法让attr_accessor更改后更改字符串插值而不编写此方法?

2 个答案:

答案 0 :(得分:1)

当您更改@s数组时,您需要重新创建gamespace字符串。或者你必须编写一个setter方法而不是attr_accessor。但是根据您的示例,看起来根本不需要@gamespace变量:

attr_accessor :s

def initialize(s = [1,2,3])
  @s = s
end

def gamespace
  @s.join(' | ')
end

答案 1 :(得分:0)

reader方法仅引用实例变量,它不会重新评估它。如果你想使用reader方法来获取更新的值,你唯一能做的就是不使用默认的setter方法,而是编写自己的方法。

def s= a
  @s = a
  @gamespace = "#{a[0]} | #{a[1]} | #{a[2]} "
end

设置@a不应该直接进行,而应始终通过s=完成。这同样适用于initialize

def initialize; s=([1, 2, 3]) end