2010-08-04 6 views
1

루비에 어떤 클래스/모듈에 해당 메소드가 있는지 아는 사람이 있습니까?Ruby에서 클래스/모듈이 = 메소드에 있습니까?

나는

a equals b 

것은 그래서 어떤 클래스/모듈에 그래서 난 별칭을 만들 수 있습니다 알고있다에

a = b 

을 변환 할.

감사합니다.

+0

가 그냥 궁금해서, 당신은 할당을 과부하 할 왜? (== 즉, 평등함을 이해할 수 있습니다.) – Gishu

답변

4

=은 할당 연산자입니다. 재정의 할 수 없습니다.

또한 새 연산자를 정의 할 수 없습니다. Jörg가 지적했듯이 a equals ba(equals(b))과 동일하거나 self.a(self.equals(b))이므로, :a 메시지와 :equals 메시지에 모두 응답하는 개체가 필요합니다.

+0

에는 "a b"를 합성 설탕으로 만드는 방법이 있습니까? (학습을 목적으로하는 것이지 모범 사례 라 할지라도) –

+2

'a equals b'는'self.a (self.equals (b))'와 같은'a (equals (b)) '와 같습니다. . 따라서': a' 메시지와': equals' 메시지에 모두 응답하는 객체가 필요하며 객체의 컨텍스트에서 DSL을 평가해야합니다. –

+0

@ Jörg : 아, 맞아 ... –

0

나는 대답을 제공하기 위해 노력했지만, 루비 똑똑처럼 나보다 외모 :

# Adults! Don't try this at work. We're what you call "amateurs" 
def a=(*args) 
    if args.size == 1 
    STDERR.puts "Assignment" 
    @a = args[0] 
    else 
    STDERR.puts "Comparison" 
    return args[0] == args[1] 
    end 
end 

self.a=([1,2,3]) 
Assignment 
=> [1, 2, 3] 

self.a=([1,2,3],[4,5,6]) 
SyntaxError: (irb):12: syntax error, unexpected ',', expecting ')' 
self.a=([1,2,3],[4,5,6]) 
      ^
     from C:/Ruby19/bin/irb:12:in `<main>' 
self.send(:a=, [1,2,3],[4,5,6]) 
Comparison 
=> false 
관련 문제