$CLASSMETHOD (ObjectScript)
構文
$CLASSMETHOD(classname, methodname, arg1, arg2, arg3, ... )
引数
引数 | 説明 |
---|---|
classname |
オプション — 文字列として評価される表現。文字列の内容は、既存のアクセス可能なコンパイル済みクラスの名前と正確に一致する必要があります。InterSystems IRIS クラスを参照する場合は、キャノニック形式 (%Library.StringOpens in a new tab) または省略形式 (%StringOpens in a new tab) で名前を指定できます。 classname が省略されている場合、現在のクラス・コンテキストが使用されます(現在のクラス・コンテキストは $THIS を使用して確認できます)。classname が省略されている場合、プレースホルダとしてのコンマを指定する必要があります。 |
methodname | 有効な文字列として評価する表現。文字列の値は、classname で指定したクラスにある既存のクラス・メソッドの名前と一致する必要があります。 |
arg1, arg2, arg3, ... | オプション — 指定したメソッドへの引数を順次置き換える一連の式。式の値には任意の型のものを使用できます。実装するユーザは、指定した表現の型とメソッドで想定している型が一致していること、また宣言された境界の範囲の値が使用されていることを確認する必要があります(指定したメソッドで引数の使用を想定していない場合、この関数呼び出しでは methodname 以外の引数を指定する必要はありません。メソッドが引数を必要とする場合、どの引数を指定する必要があるかを規定するルールとして、ターゲット・メソッドのルールが適用されます)。 |
説明
$CLASSMETHOD は、ObjectScript プログラムが任意のクラス内の任意のクラス・メソッドを呼び出すことを許可します。クラス名とメソッド名はいずれも、実行時に計算することもできれば、文字列定数として指定しておくこともできます。クラス・メソッドではなくインスタンス・メソッドを呼び出すには、$METHOD 関数を使用します。
メソッドが引数を取る場合は、メソッド名の後の引数リストで引数を指定します。最大 255 の引数値がメソッドに渡されます。
関数またはプロシージャとして $CLASSMETHOD を呼び出すと、ターゲット・メソッドの呼び出しが確定します。$CLASSMETHOD は、JOB コマンド、または DO コマンドを使用して呼び出して、返り値を破棄できます。すべての DO コマンド引数と同様に、$CLASSMETHOD は DO によって呼び出されたときに後置条件パラメータを取ることができます。
存在しないクラスを呼び出そうとすると、<CLASS DOES NOT EXIST> の後に現在のネームスペース名と指定されたクラス名が記述されたエラーが出力されます。例えば、存在しない classname “Fred” を呼び出そうとすると、エラー <CLASS DOES NOT EXIST> *User.Fred が出力されます。classname に空の文字列を指定すると、<CLASS DOES NOT EXIST> *(No name) が出力されます。
存在しないクラス・メソッドを呼び出そうとすると、<METHOD DOES NOT EXIST> エラーが発生します。
例
以下は、$CLASSMETHOD を関数として使用する例です。
SET classname = "%Dictionary.ClassDefinition"
SET classmethodname = "NormalizeClassname"
SET singleargument = "%String"
WRITE $CLASSMETHOD(classname,classmethodname,singleargument),!
%Library.String が返されます。
以下は、2 つの引数を指定して $CLASSMETHOD を使用する例です。
WRITE $CLASSMETHOD("%Library.Persistent","%PackageName"),!
WRITE $CLASSMETHOD("%Library.Persistent","%ClassName")
この呼び出しでは、%Library と %Persistent が返されます。
以下の例では、$CLASSMETHOD を使用してダイナミック SQL クエリを実行します。
SET q1="SELECT Age,Name FROM Sample.Person "
SET q2="WHERE Age > ? AND Age < ? "
SET q3="ORDER by Age"
SET myquery=q1_q2_q3
SET rset=$CLASSMETHOD("%SQL.Statement","%ExecDirect",,myquery,12,20)
DO rset.%Display()
WRITE !,"Teenagers in Sample.Person"
関連項目
-
$CLASSNAME 関数
-
$METHOD 関数
-
$PARAMETER 関数
-
$PROPERTY 関数
-
$THIS 特殊変数