如何进行连续破坏性加法/减法?

时间:2012-03-21 20:16:31

标签: ruby arrays ruby-1.9

修改该问题的上一版本并未准确反映我的问题。我编辑了它。

我想做一系列破坏性的加法/减法(对于具有相应方法的可变对象)。在a分配后:

a = [:a, :b]

以下所有内容都会返回语法错误。

a -= [:b] += [:c]
(a -= [:b]) += [:c]
a.-=([:b]).+=([:c])

有没有办法正确地做到这一点,或者这样做没有意义?

2 个答案:

答案 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]一样。左侧必须是变量名称,或者将被重写为方法调用的内容(例如[]=)。