Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

$METHOD

インスタンス・メソッドへの呼び出しをサポートします。

Synopsis

$METHOD(instance, methodname, arg1, arg2, arg3, ... )

パラメータ

instance オブジェクト参照として評価される表現。この表現の値は、クラスのメモリに存在するインスタンスの値である必要があります。
methodname 文字列として評価される式。文字列の値は、最初の引数で指定したクラスのインスタンスにある既存のメソッドの名前と一致する必要があります。
arg1, arg2, arg3, ... 指定したメソッドへの引数を置き換える一連の式。式の値には任意の型のものを使用できます。実装するユーザは、指定した表現の型とメソッドで想定されている型が一致していること、およびメソッドが想定する範囲内の値が使用されていることを確認する必要があります (指定されたメソッドが引数の使用を想定していない場合、この関数呼び出しでは classnamemethodname 以外の引数を使用する必要はありません。メソッドが引数を必要とする場合、どの引数を指定する必要があるかを規定するルールとして、ターゲット・メソッドのルールが適用されます)。

説明

$METHOD は、指定されたクラスの指定されたインスタンスで、指定されたインスタンス・メソッドを実行します。

この関数は、ObjectScript プログラムが、あるクラスの既存のインスタンス内の任意のメソッドを呼び出すことを許可します。最初の引数はオブジェクトへの参照でなければならないため、実行時に算出されます。メソッド名は、実行時に算出することもできれば、文字列リテラルとして指定しておくこともできます。メソッドが引数を取る場合は、メソッド名の後の引数リストで引数を指定します。最大 255 の引数値がメソッドに渡されます。メソッドが引数を必要とする場合、どの引数を指定する必要があるかを規定するルールとして、ターゲット・メソッドのルールが適用されます。インスタンス・メソッドではなくクラス・メソッドを呼び出すには、$CLASSMETHOD 関数を使用します。

関数またはプロシージャとして $METHOD を呼び出すと、ターゲット・メソッドの呼び出しが決定されます。$METHOD は、DO コマンドを使用して呼び出して、返り値を破棄できます。

クラス・インスタンスの 1 つのメソッド内で、$METHOD を使用してそのインスタンスの別のメソッドを参照する場合は、instance を省略できます。ただし、普通は Instance の後に続くコンマは、この場合も必要です。

存在しないメソッドまたはクラス・メソッドとして宣言されているメソッドの呼び出しを実行すると、<METHOD DOES NOT EXIST> というエラーが出力されます。

以下は、$METHOD を関数として使用する例です。

 SET ListOfStuff = ##class(%Library.ListOfDataTypes).%New()
 FOR i = "First", "Second", "Third", "Fourth"
    {
        DO ListOfStuff.Insert((i _ "-Element"))
    }
 SET methodname = "Count"
 SET elements = $METHOD(ListOfStuff,methodname)
 WRITE "Elements: ",elements,!
 SET i = $RANDOM(elements) + 1
 WRITE "Element #", i , " = " , $METHOD(ListOfStuff,"GetAt", i), !

関連項目

FeedbackOpens in a new tab