2008-09-18 14 views
7

루비에서는 다른 많은 OO 프로그래밍 언어와 마찬가지로 연산자가 오버로드 될 수 있습니다. 그러나 특정 문자 연산자 만 오버로드 될 수 있습니다.루비에서만 특정 연산자 오버로딩을 허용합니까?

이 목록은 여기에 오버로드 할 수없는 사업자의 일부, 불완전 할 수 있지만 :

!, not, &&, and, ||, or 

답변

11

방법이 overloadable 있으며, 그 언어 구문의 일부입니다.

+1

Jorg가 그의 대답에서 언급했듯이,'!'는 무시 될 수 있습니다. –

12

네. 연산자는 오버로드 할 수 없습니다. 유일한 방법.

일부 연산자는 실제로는 아닙니다. 그들은 방법에 대한 설탕입니다. 따라서 5 + 5은 실제로 5.+(5)이고 foo[bar] = baz은 실제로는 foo.[]=(bar, baz)입니다.

1

과의 약 << 예를 들어 잊지 말자 :

string = "test" 
string << "ing" 

는 호출하는 것과 동일합니다

string.<<("ing") 
6

루비 1.9에서 ! 운영자가 실제로도 방법이며 오버라이드 (override) 할 수 있습니다. 이 경우에만 &&||, 낮은 우선 순위는 andor이됩니다.

오버라이드 할 수없는 다른 "결합 된 연산자"도 있습니다 (예 : a != b이 실제로 !(a == b)이고 a += b 인 경우 실제로는 a = a+b입니다.