2009-05-27 2 views
19

수신자가있는 방법에 대해 이야기하는 문서를 읽었습니다. 수신기는 무엇입니까?Ruby에서 "수신자"는 무엇을 말합니까?

+1

미식 축구에서 영감을 얻은 용어인지 궁금해합니다. –

+0

루비에서 얻은 새로운 아이디어는 OO 프로그래밍이 일종의 메시지 전달과 같다는 것입니다. – Alex

답변

18

Ruby (및 SmallTalk에서 영감을 얻은 다른 언어)에서는 객체가 '메시지'를 보내고받는 것으로 간주됩니다. 루비, 객체, 모든 것의 기본 클래스에서

는 송신 방법이있다 : 예를 들어 Object.send : 두 경우 모두

class Klass 
    def hello 
    "Hello!" 
    end 
end 
k = Klass.new 
k.send :hello #=> "Hello" 
k.hello   #=> "Hello" 

을 k는 '안녕하세요'메시지의 수신기입니다.

+0

"k.send : hello"는 실제로 루비에서 "k.hello"를 호출하는 구문 적으로 유효한 방법입니까? – lorz

+3

당신은 k가 수신기라고 말합니다. 그렇다면 왜 "k.receive : hello"대신 "k.send : hello"라고해야할까요? 그것은 k와 같이 소리를내는 것이 수신기가 아닌 발신자입니다. – lorz

+0

당신은 k를 보내고 있기 때문에 당신은 k를받지 못합니다. 후자의 옵션은 거의 의미가 없습니다. ;) –

6

앞에있는 개체.

메서드 x.y를 "명령 x를 개체 x에 보냄"이라고 말한 것으로 생각하십시오.

루비의 고급 기능 중 일부를 익히는 데 도움이되는 것은 작은 사고 방식입니다.

6

원래 Smalltalk 용어에서 "객체"에 대한 메소드는 객체에 대한 메시지로 대신 사용되었습니다 (즉, 객체 foo에 메소드를 호출하지 않았을 때 객체 foo에 메시지를 보냈습니다). 그래서 foo.blah는 "foo"객체가 수신하는 "blah"메시지를 보냅니다. "foo"는 "blah"의 수신자입니다.

관련 문제