2

私は (Java で) API を設計しており、ユーザーが Matlab から API にアクセスすることを期待しています。問題は、API で次のような機能を提供することです。

javaApi.waitUntilPredicateIsTrue(Predicate<JavaObj> test);

私のAPIは(バックグラウンドで) (ポーリングJava Objなどの何らかのメカニズムを介して)のインスタンスを取得します。に渡されたときに、これらのインスタンスのいずれかが に評価されるまで、この API メソッドをブロックする必要があります。この API を Java から呼び出す場合は、次のようにします。Predicatetrue

javaApi.waitUntilPredicateIsTrue(new Predicate<JavaObj>() {
    public boolean evaluate(JavaObj jo) {
        return "READY".equals(jo.getState());
    }
});

あなたはアイデアを得る。

これを Matlab 内から呼び出すにはどうすればよいですか? Matlab の匿名内部クラスを使用できますか? classdefインターフェイスを拡張する Matlab を宣言できますかPredicate(これは Java ジェネリック バージョンに対応できますか)?

4

2 に答える 2

2

それは難しい質問のように聞こえます。私はまだR2006bを実行しているので、これは変更されている可能性がありますが、MATLABは関数ハンドル(無名関数を含む)と構造体をJavaオブジェクトに変換しないようです。構文が変更されたため、MATLABカスタムクラスについてはわかりません。文字列、配列、およびセル配列は適切に変換されます。彼らは、インターフェースの実装についてはまったくコメントしていません。(:p:p:p BOO HISS)

編集: Matlab Centralでこのページを見つけました。これは、文書化されていないインターフェイスについて説明しています。

于 2009-04-23T14:24:10.257 に答える
1

Matlabには、単一のメソッドを提供するためだけにクラス全体を作成するようにユーザーに強制するよりもはるかに優れたソリューションがあります。それらの無名関数を見てください。

Matlabの無名関数には奇妙なスコープ規則があることに注意してください。リンクされたヘルプページの「式で使用される変数」セクションを必ずお読みください。より伝統的な字句スコープが必要な場合は、ネストされた関数を見てください。

編集: 述語関数をJavaに渡すのではなく、Matlabからポーリングを行うことを想定しています。例:

function waitForPredicate(pred)
  while pred
  end
end

waitForPredicate(@()javaApi.isMyConditionMet());
于 2009-04-23T11:37:48.003 に答える