| 迅速に、Javaクラスの機能で、MINERVAを拡張するメカニズム。
リフレクションの使用は、minervaxを通して静的にJava拡張をMINERVAへ加えることに替えて使用できます。
意味論:
Javaメソッド・オブジェクトからMINERVA述語を生成する:
- メソッドが型'void'を復帰するならば、述語は成功します。
リターン項はありません。
- メソッドが型'boolean'を復帰するならば、それに応じて、述語が成功するか、失敗します。 リターン項はありません。
- 上記でない場合、述語は成功します。 メソッドの結果は、述語の最後の引き数として復帰されます。
- メソッドが'static'(すなわちクラス・メソッド)でないならば、述語は最初の引き数として、メソッドが適用されるオブジェクトをとります。
要約:
static void fun(X, Y) => fun(X, Y)
void fun(X, Y) => fun(Object, X, Y)
static boolean fun(X, Y) => fun(X, Y)
boolean fun(X, Y) => fun(Object, X, Y)
static int fun(X, Y) => fun(X, Y, Result)
int fun(X, Y) => fun(Object, X, Y, Result)
述語invoke_method/4は、直接メソッドを呼び出すために使われます。
つまり、declare_method/2を使わずに呼び出すということです。
invoke_method(+Method, +Object, +ArgumentList, -Result)
例:
:
get_class('java.lang.String', String),
get_class(int, Integer),
get_method(String, substring, [Integer,Integer], Substring),
invoke_method(Substring, hello, [1,4], Result).
==>
Result = ell
例題プログラムのセクションを参照ください。
- 例:
- ExamplePrograms/MinervaFeatures/Reflection
|