Как я могу сделать последовательное разрушительное сложение / вычитание? - PullRequest
1 голос
/ 22 марта 2012

Редактировать Предыдущая версия вопроса не совсем точно отражала мою проблему. Я редактировал это.

Я хочу сделать последовательность деструктивного сложения / вычитания (для изменяемых объектов, которые имеют соответствующие методы). После a назначается:

a = [:a, :b]

все последующие возвращают синтаксическую ошибку.

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

Есть ли способ сделать это правильно, или нет смысла делать это?

Ответы [ 2 ]

2 голосов
/ 22 марта 2012

Прежде всего

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 голос
/ 22 марта 2012

Вы не можете присвоить литералу массива, например, [:b] += [:c] - это синтаксическая ошибка, как и [:b] = [:c]. Левая часть должна быть именем переменной или чем-то, что будет переписано как вызов метода (например, []=).

...