2014-01-26 3 views
2

를 호출하는 방법은 우리가 클래스루비 연산자와

class Foo 
    def + (element); end 
    def add (element); end 
end 

이제 우리는 같은이 두 메소드를 호출 할 수 있다고 가정한다. 이것은 메소드를 호출하는 올바른 방법입니다.

내 질문은 :

foo + 'bar' 

아니라 : : 메소드 이름이 실제로 연산자 오버로딩 경우

foo add 'bar' 

루비 구별합니까 우리가 뭔가를 할 수있는 이유는 무엇입니까? 어떻게 작동합니까?

+0

나쁘지 않은 질문입니다. +1 –

+1

루비는 연산자를 나타내는 문자열을 다른 문자열과 구별합니다. 따라서'def +'를하면 기존 연산자를 정의 (또는 오버로딩)한다는 것을 알 수 있습니다. 'add'는 이미 연산자가 아니기 때문에 일반적인 메소드로 취급됩니다. 다음과 같이 보석을 사용하여 사용자 정의 연산자를 정의 할 수 있습니다. http://stackoverflow.com/questions/11874579/define-custom-ruby-operator – lurker

+0

mbratch, 질문을 수락하고 싶습니다! – squixy

답변

0

많은 사람들이 Ruby의 구문 설탕으로 참조하는 것 중 하나입니다. 이 언어는 이러한 수학 연산자와 << 삽입 연산자와 같은 다른 ASCII 기호 연산자를 인식하며 공백 및 메서드 점없이 호출 할 수 있습니다. 이것은 메소드의보다 자연스러운 사용을 허용합니다.

귀하의 #add 메소드가 Ruby에 의해 표준 연산자로 인식되지 않으므로이 구문 도움말이 수행되지 않습니다.

0

루비는 (하위 집합) 연산자라고도 불리는 특정 메소드 이름을 다르게 처리합니다. 그것들은 점 .없이 호출 할 수 있고 소유 객체 앞에 붙일 수 있습니다. 즉, 단항 연산자과 같은 인수가 필요하지 않으며 우선 순위가 다른 표준 방법을 사용합니다.

Here은 키워드가 아니며 정의 또는 과부하 (Y로 표시됨)가 가능한 구체적인 '연산자'메소드의 고정 목록입니다.