2009-04-23 4 views
2

저는 (자바에서) API를 설계 중이며 사용자가 Matlab에서 API에 액세스 할 것을 기대합니다. (어떤 메커니즘을 통해 예를 들어, 폴링)를 Java Obj의 인스턴스의 보류를 얻을 수 (배경)Matlab/Java API 콜백

javaApi.waitUntilPredicateIsTrue(Predicate<JavaObj> test); 

내 API : 문제는 내가 API가 같은 기능의 일부를 제공 할 것입니다. 이 API 메소드가 Predicate에 전달 될 때까지 이러한 인스턴스 중 하나가 true으로 평가 될 때까지 차단해야합니다. Java에서이 API를 호출하는 경우 다음을 수행합니다.

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

아이디어를 얻을 수 있습니다.

어떻게 이것을 Matlab에서 호출 할 수 있습니까? Matlab의 익명 내부 클래스를 사용할 수 있습니까? 인터페이스 Predicate을 확장하는 Matlab classdef을 선언 할 수 있습니까 (Java 일반 버전을 처리 할 수 ​​있습니까?).

답변

2

까다로운 질문입니다. 여전히 R2006b를 실행 중이므로 변경되었을 수 있지만 MATLAB은 함수 핸들 (익명 함수 포함) 및 구조를 Java 객체로 변환하지 않습니다. 구문이 변경되었으므로 MATLAB 사용자 지정 클래스에 대해 알지 못합니다. 문자열, 배열 및 셀 배열 will translate properly. 그들은 인터페이스 구현에 대해 전혀 언급하지 않습니다. (: p : p : p BOO HISS)

편집 : 그냥이 페이지를 Matlab Central에서 찾았습니다. 문서화되지 않은 인터페이스에 대해 이야기합니다.

1

Matlab은 사용자가 단일 메소드를 제공하기 위해 전체 클래스를 작성하도록 강요하는 것보다 훨씬 좋은 솔루션입니다. 그들의 anonymous functions을보십시오.

Matlab의 익명 함수에는 홀수 범위 규칙이 있음에 유의하십시오. 링크 된 도움말 페이지의 "표현식에 사용 된 변수"섹션을 반드시 읽으십시오. 더 전통적인 어휘 범위 지정을 원하면 nested functions을 살펴보십시오.

편집 : 내가, 당신이 matlab에에서 폴링을하고있을 것이라고 가정 자바 술어 기능을 전달하고 있지 않다. 예 :

function waitForPredicate(pred) 
    while pred 
    end 
end 

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

불행히도 아닙니다; 가장 일반적인 사용 사례 및 Matlab에서 내 API를 사용하기 쉽게 만들기 위해 노력하고 있습니다. 기본적으로 API는 (Java) 객체에 액세스하는 데 사용됩니다. 그러나 객체가 사용자의 관점에서 "준비"되어 있지 않을 수 있습니다. 폴링 로직을 직접 구현하는 대신 간단한 waitUntilXIsReady 메커니즘을 제공하기를 원했습니다. 제안한 문제는 API에 "isMyConditionMet"이 없다는 것입니다. 그가 만족하는지 여부를 결정해야하는 것은 Matlab 최종 사용자입니다 –

+0

"폴링 로직"은 단순히 "! conditionIsMet"을 회전시키는 것보다 복잡하다고 말해야합니다. 그). 이는 새 버전의 개체를 준비 할 수 있기 때문입니다 (멀티 캐스트 그룹에 게시 된 이벤트를 통해 푸시됩니다). 정말 Matlab 사용자가 원시 멀티 캐스트를 망설이지 않기를 바랍니다! –