messenger

obj.slot_name や recv.msg(1, 2, :a 3) のように記述する、 オブジェクトのスロットにアクセスしたり メッセージ送ったりするためのオブジェクトです。 評価すると、args が指定されていなければ receiver の message というスロットに アクセスし、指定されていれば receiver に args を引数として message を送り、 その結果を返します。

'obj.slot_name のように記述すると、スロット receiver に obj が、 スロット message に slot_name がセットされた messenger を、 'recv.msg(1, 2, :a 3) のように記述すると、スロット receiver に recv が、 スロット message に msg が、スロット args に &(1, 2, :a 3) がセットされた messenger を得ることができます。

self.slot_name や self.msg(arg) のように、レシーバがシンボルの self である場合、 .slot_name や .msg(arg) といったように、self を省略することができます。

messenger には、ブロックや関数を引数として指定するのに便利な構文があります。 詳しくは、インデントブロック の項を見てください。

ペアレント

Messenger

スロット

receiver
レシーバとして使用されるオブジェクトです。
message
メッセージとして使用されるシンボルです。
args
メッセージを送る際に引数として与えられるオブジェクトです。

メソッド

(=)(value)
self が指し示すオブジェクトのスロットに value を代入し、value を返します。 args が指定されていた場合エラーです。

その他のメソッドの定義は、初期化ファイル群の中の methods.cy にあります。