我经常这样做:
@value = @value.some_method
但是在ruby中没有更短的语法吗?有些方法提供等效的bang,但遗憾的是不是所有的方法…
对于迭代可以使用:
i += 1
是否也可以用于上面的代码片段?
没有比这更短的方法了。
公平地说,是一个不寻常的模式,虽然不是特别罕见,但如果有像
这样的操作符,则会导致混淆:@value .= some_method
在读取时应该如何解析?
正如铁皮人所指出的,在这里,就地操作符才是最好的。
不能将实际变量作为接收方,因为无法获得变量的名称。相反,您需要像这样使用变量名:
class A
attr_accessor :value
def change_to_do_something name
instance_variable_set(name, "do something")
end
end
a = A.new
a.value = "Hello"
p a.value
# => "Hello"
a.change_to_do_something(:@value)
p a.value
# => "do something"