代码之家  ›  专栏  ›  技术社区  ›  oxbow_lakes

Matlab/Java API回调

  •  2
  • oxbow_lakes  · 技术社区  · 16 年前

    我正在设计一个API(在爪哇),并希望用户能够从Matlab访问API。问题是,我希望API提供以下功能:

    javaApi.waitUntilPredicateIsTrue(Predicate<JavaObj> test);
    

    我的API(在后台)获取 Java Obj (通过某种机制,例如 轮询 )我希望此API方法在传递给 Predicate 评估为 true . 如果我从Java调用这个API,我会这样做:

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

    你明白了。

    如何在matlab中调用它? 我可以使用Matlab中的匿名内部类吗?我能申报一个matlab吗 classdef 扩展了接口 谓语 (这能应付Java泛型版本)吗?

    2 回复  |  直到 16 年前
        1
  •  2
  •   Jason S    16 年前

    这听起来是个棘手的问题。我仍然运行RN66B,所以这可能已经改变了,但是看起来Matlab将不会把函数句柄(包括匿名函数)和结构转换成Java对象。我不知道matlab自定义类,因为语法已经改变了。字符串、数组和单元格数组 will translate properly . 他们对实现接口一点也不评论。(:p:p:p嘘声)

    编辑:刚刚在上找到此页 Matlab Central ,它讨论一些未记录的接口。

        2
  •  1
  •   Mr Fooz    16 年前

    matlab的解决方案比强迫用户创建一个完整的类来提供一个单一的方法要好得多。看看他们的 anonymous functions .

    注意,matlab中的匿名函数有奇数的作用域规则。确保已阅读链接帮助页的“表达式中使用的变量”部分。如果你想要更传统的词汇范围,看看 nested functions .

    编辑: 我假设您将从Matlab进行轮询,而不是将谓词函数传递给Java。例子:

    function waitForPredicate(pred)
      while pred
      end
    end
    
    waitForPredicate(@()javaApi.isMyConditionMet());