【问题标题】:How can I do consecutive destructive addition/subtraction?如何进行连续的破坏性加法/减法?
【发布时间】:2012-03-21 20:16:30
【问题描述】:

编辑以前版本的问题没有准确反映我的问题。我编辑了它。

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

a = [:a, :b]

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

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

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

【问题讨论】:

  • 我什至不明白你想要达到什么目的。
  • @Theo 我编辑了我的问题。你现在明白了吗?

标签: ruby arrays ruby-1.9


【解决方案1】:

首先

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])

【讨论】:

    【解决方案2】:

    您不能分配给数组文字,例如[:b] += [:c] 是一个语法错误,就像 [:b] = [:c] 一样。左侧必须是变量名,或者将被重写为方法调用的名称(例如[]=)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多