我正在设计API(在Java),并希望用户从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 扩展接口 Predicate (这可以应付Java通用版本)吗?

有帮助吗?

解决方案

这听起来像是一个棘手的问题。我仍在运行R2006B,因此可能已经更改了,但是MATLAB似乎不会将函数句柄(包括匿名函数)和结构转换为Java对象。我不知道MATLAB自定义类,因为语法已更改。字符串,阵列和单元格数阵列 将正确翻译. 。他们根本没有就实施界面发表评论。 (:P:P:P Boo Hiss)

编辑:刚刚在 MATLAB中央, ,它讨论了一些无证件的接口。

其他提示

MATLAB比强迫用户创建整个课程以提供单一方法的解决方案要好得多。看他们 匿名函数.

请注意,MATLAB中的匿名函数具有奇怪的范围规则。确保您阅读链接帮助页面的“表达式中使用的变量”部分。如果您想要更多传统的词汇范围,请看一下 嵌套功能.

编辑: 我假设您将从MATLAB进行投票,而不是将谓词功能传递给Java。例子:

function waitForPredicate(pred)
  while pred
  end
end

waitForPredicate(@()javaApi.isMyConditionMet());
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top