アーギュメント:
$ と #、オブジェクトに対する可変アーギュメント

メッセージボックスの中の $

ドル記号 ($) は、メッセージボックスの中で変更が可能なアーギュメントを表すために使用される特別な文字です。メッセージボックスに、アーギュメントの 1 つとして$ と 1 〜 9 までの数字(例:$2)が含まれている場合、このアーギュメントは、メッセージボックスが自分自身のメッセージを送信する前に、入力されたメッセージの中の対応するアーギュメントによって置き換えられます。

上の左側の例では、メッセージボックスの中の $1 アーギュメントは、メッセージが送信される前に、インレットで受信した数値(この場合には 9)によって置き換えられます。このメッセージは、Max ウィンドウに "Received: Preset No. 9" と表示されます。

右側の例では、可変アーギュメントがシンボルと数値のどちらに置き換えることも可能であるということが示されています。また、メッセージボックスの中で可変アーギュメントを任意の順序に並べかえることが可能であるということも示しています。これはメッセージの並べ替えを行なうパワフルなツールになります。この例では、メッセージ assoc third 3coll オブジェクトに送信されます。

すべての可変アーギュメントのための値が受信されないままメッセージボックスがトリガされた場合(例えば、bang によってトリガされた場合)、メッセージボックスは一番最後に受信していた値を使います。すべての可変アーギュメントの初期値は 0 です。

上の左側の例で、最初にメッセージ 60 を受信した場合 makenote オブジェクトに 60 0 が送信されます。しかし、メッセージ 61 65 を受信した後では、値 65 が $2 アーギュメントに保存されるため、メッセージ 60 によって、60 65makenote に送信されます。

メッセージボックスは、インレットで単語(bang を除く)を受信した場合、その単語の前に "symbol" という単語が置かれていない限りトリガされません。この場合、$1 アーギュメントは、"symbol" ではなく、それに続く単語で置き換えられます。右の例では、$1 アーギュメントは "set" あるいは "append" で置き換えられ、メッセージ set 34 あるいは append 34 が次のメッセージボックスに送信されます。ドル記号($)のような特殊文字を、特別な意味を持たせずにメッセージに含めたい場合、その特殊文字の前にバックスラッシュ( \ ) をつけます。

オブジェクトボックスの中の $

可変 $ アーギュメントは、exprif のようなオブジェクトのオブジェクトボックスの中で使用することもできます。これらのオブジェクトの中では、$ の直後に、アーギュメントが int、float、シンボルのどれで置き換えられるかを示す ifs という文字を続けなければなりません。

インレットで受信したメッセージが、可変アーギュメントの型とマッチしない(例えば、$f アーギュメントを置き換える値として int が受信された)場合、オブジェクトは入力された値を適切な型に変換しようとします。しかし、オブジェクトはシンボルを数値に変換することはできないため、$i$f アーギュメントにシンボルが受信された場合、エラーメッセージが出力されます。$ アーギュメントを使用することができる他のオブジェクトは、sxformatvexpr です。

オブジェクトボックスとメッセージボックスの中の #

他のパッチャーの中のサブパッチとして使用するパッチャーを編集する場合、サブパッチの中のメッセージボックス、およびほとんどのオブジェクトボックスは、アーギュメントとしてポンド記号 (#) に数字を続けたもの(例:#1) を入力することによって、可変アーギュメントを受け取ることができます。こうしておくと、このサブパッチが他のパッチャーの中で使われる場合に、サブパッチの中の # アーギュメントは、パッチャーの中のオブジェクトボックスに直接入力されたアーギュメントによって置き換えられます。

この場合、パッチャーオブジェクトや自作のオブジェクトは、可変アーギュメントに情報を提供するために、多くの Max オブジェクトと同様にタイプイン・アーギュメント(訳注:あらかじめオブジェクトボックスに入力されるアーギュメント)を必要とします。#1 のようなシンボルは可変アーギュメントで、そのパッチを他のパッチの内部のオブジェクトとして使う場合に、対応するアーギュメントとして入力したどのような数値、あるいはシンボルにでも置き換えられます。可変アーギュメントはオブジェクト名それ自身を与えるために使うことはできません。しかし、オブジェクトの内部のどのような場所ででも、アーギュメントとして使用することができます。

次の例では、limitNotes オブジェクトボックスの中に入力されるアーギュメントは limitNotes の中の複数のオブジェクトに値を提供しています。hslider が動かされた場合、1 つの limitNotes オブジェクトは MIDI チャンネル 5 で 300 ミリ秒ごとにノートを演奏し、もう 1 つの limitNotes オブジェクトは MIDI チャンネル 7 で 200 ミリ秒毎にノートを演奏します。


これらのはMax オブジェクトです。    limitNotes はドキュメントとして保存されてい るパッチです。

可変アーギュメントがシンボルの最初の部分として提供される場合、ポンド記号 (#) と数字はシンボルによるアーギュメントの一部として使用することもでき、名前のバリエーションを供給することもできます。下の例では、scale の中の可変アーギュメントの #1 の部分は、scaleを使っているパッチの中のアーギュメントによって置き換えられます。scale オブジェクトはそれぞれ、あらかじめ保存されている別々のテーブルファイルを使い、異なった結果をもたらします。

これと同じテクニックは、サブパッチ内の sendreceive オブジェクトに固有の名前を与えるために使うことができ、その sendreceive 間だけでプライベートに(そのサブパッチの他のインスタンスとの間で局所的に)メッセージの交換を行なうようにすることができます。

 

このようなオブジェクトがprivate という名前のパッチの中にあり パッチがこのような 2 つのサブパッチとして使用されている場合、 1 つのパッチの中にはこのような名前のオブジェクトが作られ 他のものとは違った、固有の名前になります。

pcontrol オブジェクトにload メッセージを送って自動的にパッチャーファイルを開く場合、ロードされるパッチの中にある可変の # アーギュメントは、次の例のように、load メッセージに続くアーギュメントとして提供される値で置き換えられます。

これらのオブジェクトがパッチ内に存在し、このメッセージがパッチに送信されると、パッチは pcontrol オブジェクトによって次のように開かれます。

#0 は特別な意味を持ちます。これは、シンボルアーギュメントの最初の部分に置かれ、パッチャーがロードされる際に、アーギュメントを個々のパッチャー(および、サブパッチャー)に固有な識別子に変換します。これによって、sendreceive のようなオブジェクトを含むパッチャーの複数のコピーを、お互いに干渉することなく開くことができるようになります。

参照

expr 数式の評価
message 任意のメッセージを送信します
pcontrol パッチャー内のサブウィンドウを開閉します
句読法 オブジェクトとメッセージの中の特殊文字