Domanda

Sto progettando un'API (in Java) e si aspettano di avere utenti che accedono al API da Matlab. Il problema è che voglio l'API per fornire un pezzo di funzionalità come:

javaApi.waitUntilPredicateIsTrue(Predicate<JavaObj> test);

Il mio API (in sottofondo) si impossessa delle istanze di Java Obj (tramite qualche meccanismo, per esempio di polling ). Voglio che questo metodo API di bloccare fino a quando uno di questi casi, quando passò ai Predicate restituisce true. Se mi stava chiamando questa API da Java, mi piacerebbe fare:

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

Si ottiene l'idea.

Come può questo essere chiamato dall'interno di Matlab? Posso utilizzare le classi interne anonime da Matlab? Posso dichiarare una classdef Matlab che estende l'interfaccia di Predicate (questo può far fronte con la versione generica Java)?

È stato utile?

Soluzione

Che suona come una domanda difficile. Sono ancora in corso R2006b quindi questo potrebbe essere cambiato, ma sembra che MATLAB non si tradurrà maniglie funzione (incl. Funzioni anonime) e strutture in oggetti Java. Non so su classi personalizzate MATLAB, dal momento che la sintassi è cambiato. Stringhe, array, array di celle e si tradurrà correttamente . Essi non commentare affatto su interfacce di attuazione. (: P: p: p BOO HISS)

modifica: appena trovato questa pagina sul Matlab centrale , si parla di alcune interfacce non documentate.

Altri suggerimenti

Matlab ha una soluzione molto più bello di costringere gli utenti a creare una intera classe solo per fornire un unico metodo. Date un'occhiata al loro funzioni anonime .

Si noti che funzioni anonime in Matlab hanno regole di scoping dispari. Assicurarsi di leggere le "variabili utilizzate nella espressione" sezione della pagina di aiuto collegata. Se si desidera scoping lessicale più tradizionali, dare un'occhiata a funzioni nidificate .

Modifica Io parto dal presupposto che si farà il polling da Matlab, non passando la funzione predicato a Java. Esempio:

function waitForPredicate(pred)
  while pred
  end
end

waitForPredicate(@()javaApi.isMyConditionMet());
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top