2009-05-27 5 views
19

私は、受信機を持っている方法について語っている文書を読んでいます。受信機とは何ですか?Rubyでは「レシーバ」とは何ですか?

+1

私はそれがアメリカンフットボールに触発された言葉だったのか疑問に思っていました。 –

+0

私がルビーから得た新しい考え方は、OOプログラミングは一種のメッセージパッシングのようなものです。 – Alex

答えて

18

オブジェクトは、「メッセージ」を送信および受信するものと考えられています。例えばObject.send:ルビー、オブジェクトに

、すべての基本クラスは、送信方法有するこれらの場合のkの双方において

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

を「ハロー」メッセージのレシーバあります。

+0

"k.send:hello"は実際にRubyで "k.hello"を呼び出す構文上有効な方法ですか? – lorz

+3

あなたはkが受信機だと言う。それではなぜ "k.receive:hello"の代わりに "k.send:hello"と言うのですか?それはkのように聞こえる*は受信者ではなく送信者です。 – lorz

+0

あなたはTOにkを送信しているので、TOのkを受信して​​いません。後者の選択肢はほとんど意味がありません。 ;) –

6

オブジェクトの前に。

は「Xオブジェクトを指示yを送る」というような方法のX.Yを呼び出すのではと思います。あなたはRubyのより高度な機能の一部を取得するよう

それは思考のSmalltalkの方法です、それはあなたによく機能します。 「オブジェクト」のメソッドではなくオブジェクトへのメッセージのように参照されたオリジナルのSmalltalkの用語で

6

は、(すなわち、あなたがオブジェクトfooのメソッドを呼び出していない、あなたがオブジェクトfooにメッセージを送信しました)。したがって、foo.blahは "foo"オブジェクトが受信している "blah"メッセージを送信しています。 "foo"は "blah"の受信者です。ルビー(およびスモールトークからインスピレーションを取る他の言語)で

関連する問題