header

$0, $1, $2.... の使い方

オブジェクト、またはメッセージ中に記された$0, $1, $2など「$」に続く数字は、条件に応じて異なる値に展開されます。
以下の3つの状況により、用途は少しずつ異なります。

  1. メッセージ中の$1, $2
  2. Abstraction内のオブジェクト中にある$1, $2
  3. Abstraction内のオブジェクト中にある$0

サンプル・ファイル
doller_sign_test.pd ←2つのファイルを同一ディレクトリに保存して、こちらを開いて下さい。
doller_sign_test_sub.pd

1. メッセージ中の$1, $2

メッセージ中の$1, $2はInletから入力された値に置換されます。

メッセージ中の$1, $2はInletから入力された値に置換されます。

メッセージに入力された値が一つの場合は、$1がこの値に置換されます。
また、listが入力された場合は$(n)が、listのn番目の値に置換されます。

以下の例では二つの入力値の順序を入れ替える、[swap]オブジェクトに相当する機能を実現しています。

二つの入力値の順序を入れ替える、[swap]オブジェクトに相当する機能を実現しています。

2. Abstraction内のオブジェクト中にある$1, $2

Abstraction『内』のオブジェクトに$1, $2といった引数を与えた場合、これらはAbstractionのインスタンス作成時に与えた引数に置換されます。 これらはあくまでAbstraction内の「オブジェクト」に適用される条件であり、メッセージメッセージには適用されない点にご注意下さい。
次の例では、コンソールに"This is 0" と出力されます。

コンソールに'This is 0' と出力されます。

3. Abstraction内のオブジェクト中にある$0

Abstraction内の$0は、Pdが各インスタンスに与える固有のID番号に展開されます。
次の例では$0はインスタンスに与えられたID "1003"が出力されていますが、この数字は起動毎に変わるものと思われます。

$0はインスタンスに与えられたID '1003'が出力されていますが、この数字は起動毎に変わるものと思われます。

で、AbstractionのIDを取得して何が嬉しいのかと言いますと…
使い方はいろいろあるのでしょうが、典型的な応用例として、[send] [receive]オブジェクトのローカル可があります。

次の例をご覧下さい。

[send dummy]に送られた値は、同じAbstractionのすべてのインスタンスに届いてしまいます。

通常、[send]オブジェクトに入力された値は、同じウィンドウどころか、(同一プロセスの)Pdで起動中のすべてのウィンドウに存在する同名の[receive]に送信されてしまいます。
サンプルでも実験していただければわかるように、[send dummy]に送られた値は、同じAbstractionのすべてのインスタンスに届いてしまいます。

同じパッチのまったく異なる場所であれば、これを回避するために[send] [receive]に新規の名前を割り当てることもできるでしょう。
しかし、同じAbstractionを複数インスタンス作成し、そのインスタンスにローカルな送受信ペアを作成したい場合は個別の名前を付けることができません。
そこで、[send] [receive]の名前の中に$0を含めることで、そのインスタンス内でのみ共有される[send][receive]オブジェクトのペアを作ることができます。
たとえば二つのインスタンスに1003, 1004というIDが割り当てられた場合、インスタンス中のオブジェクト名は(表示こそ変わらないものの)[send 1003-dummy] [receive 1004-dummy]と言った名前に展開されます。

次の例では、二つ開かれたインスタンスのうち右側のウィンドウ中のnumberを変更した際、$0を含まない[receive]だけが値を受信しているのが確認できます。

二つ開かれたインスタンスのうち右側のウィンドウ中のnumberを変更した際、$0を含まない[receive]だけが値を受信しているのが確認できます。