更改后的字符串插值更新
String interpolation update after change
我在一个内插字符串中有值引用这样的数组:
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
在不写这个方法的情况下让attr_accessor
更新字符串插值?
当您更改 @s
数组时,您将需要重新创建 gamespace
字符串。或者你必须写一个 setter 方法而不是 attr_accessor
。但是从您的示例看来,根本不需要 @gamespace
变量:
attr_accessor :s
def initialize(s = [1,2,3])
@s = s
end
def gamespace
@s.join(' | ')
end
一个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
我在一个内插字符串中有值引用这样的数组:
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
在不写这个方法的情况下让attr_accessor
更新字符串插值?
当您更改 @s
数组时,您将需要重新创建 gamespace
字符串。或者你必须写一个 setter 方法而不是 attr_accessor
。但是从您的示例看来,根本不需要 @gamespace
变量:
attr_accessor :s
def initialize(s = [1,2,3])
@s = s
end
def gamespace
@s.join(' | ')
end
一个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