루비에서는 다른 많은 OO 프로그래밍 언어와 마찬가지로 연산자가 오버로드 될 수 있습니다. 그러나 특정 문자 연산자 만 오버로드 될 수 있습니다.루비에서만 특정 연산자 오버로딩을 허용합니까?
이 목록은 여기에 오버로드 할 수없는 사업자의 일부, 불완전 할 수 있지만 :
!, not, &&, and, ||, or
루비에서는 다른 많은 OO 프로그래밍 언어와 마찬가지로 연산자가 오버로드 될 수 있습니다. 그러나 특정 문자 연산자 만 오버로드 될 수 있습니다.루비에서만 특정 연산자 오버로딩을 허용합니까?
이 목록은 여기에 오버로드 할 수없는 사업자의 일부, 불완전 할 수 있지만 :
!, not, &&, and, ||, or
방법이 overloadable 있으며, 그 언어 구문의 일부입니다.
사실, 그건 문제가되지 않습니다. 'a && b '를'a. && (b)'로 변환하는 대신'a. && {b}'로 변환 할 수 있습니다. 블록은 게으른 평가를 제공합니다. –
네. 연산자는 오버로드 할 수 없습니다. 유일한 방법.
일부 연산자는 실제로는 아닙니다. 그들은 방법에 대한 설탕입니다. 따라서 5 + 5
은 실제로 5.+(5)
이고 foo[bar] = baz
은 실제로는 foo.[]=(bar, baz)
입니다.
과의 약 <<
예를 들어 잊지 말자 :
string = "test"
string << "ing"
는 호출하는 것과 동일합니다
이string.<<("ing")
루비 1.9에서 !
운영자가 실제로도 방법이며 오버라이드 (override) 할 수 있습니다. 이 경우에만 &&
및 ||
, 낮은 우선 순위는 and
및 or
이됩니다.
오버라이드 할 수없는 다른 "결합 된 연산자"도 있습니다 (예 : a != b
이 실제로 !(a == b)
이고 a += b
인 경우 실제로는 a = a+b
입니다.
Jorg가 그의 대답에서 언급했듯이,'!'는 무시 될 수 있습니다. –