Обратный вызов Matlab / Java API - PullRequest
2 голосов
/ 23 апреля 2009

Я разрабатываю API (на Java) и ожидаю, что пользователи получат доступ к API из Matlab. Проблема в том, что я хочу, чтобы API предоставил такую ​​функциональность, как:

javaApi.waitUntilPredicateIsTrue(Predicate<JavaObj> test);

Мой API (в фоновом режиме) получает экземпляры Java Obj (через некоторый механизм, например опрос ). Я хочу, чтобы этот метод API блокировался до тех пор, пока один из этих экземпляров при передаче в Predicate не будет равен true. Если бы я вызывал этот API из Java, я бы сделал:

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

Вы поняли идею.

Как это можно вызвать из Matlab? Могу ли я использовать анонимные внутренние классы из Matlab? Могу ли я объявить Matlab classdef, который расширяет интерфейс Predicate (может ли это справиться с универсальной версией Java)?

Ответы [ 2 ]

2 голосов
/ 23 апреля 2009

Звучит как сложный вопрос. Я все еще использую R2006b, так что, возможно, это изменилось, но похоже, что MATLAB не будет переводить дескрипторы функций (включая анонимные функции) и структуры в объекты Java. Я не знаю о пользовательских классах MATLAB, так как синтаксис изменился. Строки, массивы и массивы ячеек будут переведены правильно . Они вообще не комментируют реализацию интерфейсов. (: p: p: p BOO HISS)

edit: только что нашел эту страницу на Matlab Central , там говорится о некоторых недокументированных интерфейсах.

1 голос
/ 23 апреля 2009

Matlab имеет гораздо более приятное решение, чем принуждение пользователей создавать целый класс только для предоставления одного метода. Взгляните на их анонимные функции .

Обратите внимание, что анонимные функции в Matlab имеют странные правила видимости. Обязательно прочитайте раздел «Переменные, используемые в выражении» на странице справки по ссылке. Если вы хотите более традиционную лексическую область видимости, взгляните на вложенные функции .

EDIT: Я предполагаю, что вы будете выполнять опрос из Matlab, а не передавать функцию предиката в Java. Пример:

function waitForPredicate(pred)
  while pred
  end
end

waitForPredicate(@()javaApi.isMyConditionMet());
...