修改该问题的上一版本并未准确反映我的问题。我编辑了它。
我想做一系列破坏性的加法/减法(对于具有相应方法的可变对象)。在a
分配后:
a = [:a, :b]
以下所有内容都会返回语法错误。
a -= [:b] += [:c]
(a -= [:b]) += [:c]
a.-=([:b]).+=([:c])
有没有办法正确地做到这一点,或者这样做没有意义?
答案 0 :(得分:2)
首先
a = [:a, :b]
a -= [:a]
是非破坏性操作。它的真正含义是
a = a - [:a]
如果你真的想链接破坏性操作,你可以,但你可能需要在现有的破坏性方法的基础上创建自己的方法:
class Array
def my_delete(e)
delete(e)
self
end
end
[:a, :b].my_delete(:b).concat([:c])
答案 1 :(得分:1)
您无法指定数组文字,例如[:b] += [:c]
是语法错误,就像[:b] = [:c]
一样。左侧必须是变量名称,或者将被重写为方法调用的内容(例如[]=
)。