2012-03-21 1 views
1

편집 질문의 이전 버전이 내 문제를 정확하게 반영하지 않았습니다. 나는 그것을 편집했다.연속해서 더하기/빼기를 ​​어떻게 할 수 있습니까?

(상응하는 메서드가있는 변경 가능한 개체에 대한) 상쇄적인 덧셈/뺄셈을 수행하고 싶습니다. a 이후에 할당 된 :

a = [:a, :b] 

다음 중 하나가 구문 오류를 반환합니다.

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

올바르게 수행 할 수있는 방법이 있습니까?

+0

심지어 당신이 달성하고자하는 것을 이해합니다. – Theo

+0

@Theo 나는 내 질문을 편집했다. 너 지금 이해하니? – sawa

답변

2

먼저 파괴하지 동작이다. 무엇 정말 의미하는 것은 당신이 정말로 체인 파괴 작업을하려면

a = a - [:a] 

, 당신은 할 수 있지만, 기존의 파괴적인 방법의 기초에 자신의 방법을 만들어야 할 수도 있습니다 : 나는하지

class Array 
    def my_delete(e) 
    delete(e) 
    self 
    end 
end 

[:a, :b].my_delete(:b).concat([:c]) 
+0

나는 혼란 스러웠다 고 생각한다. 자, 나는 그것에 대해 분명히 생각합니다. – sawa

1

예를 들어, 배열 리터럴에 할당 할 수 없습니다. [:b] += [:c]은 구문 오류입니다. [:b] = [:c]과 같습니다. 왼쪽은 변수 이름이거나 메소드 호출로 다시 작성되어야합니다 (예 : []=). 모든

a = [:a, :b] 
a -= [:a] 

+0

내 질문을 편집했습니다. – sawa