Domanda

L'ho appena scoperto quando ho chiamato Java da Matlab

object.method(arg1,...,argn)

è equivalente a

method(object, arg1,...,argn)

Il problema qui è che ho anche un method.m che esegue alcune traduzioni da Java a Matlab (ad es. converti String [] in cella di stringhe). Il mio method.m sembra

function result = method(object, arg1,...argn)
  intermediate = object.method(arg1,...argn);
  result = translate(intermediate);

Quello che sta succedendo è quando chiamo il metodo (object, arg1, ..., argn) , fa la chiamata Java diretta, invece di usare il mio method.m

La correzione è semplice, non usare lo stesso nome di metodo sia per i miei metodi Java che per i miei file .m . Ma c'è un altro modo? Come faccio a sapere quale metodo verrà chiamato con lo stesso nome? Esiste un modo per assicurarsi che io chiami method.m anziché il metodo Java? È facile garantire una chiamata al metodo Java, basta usare object.method sintassi.

Come nota a margine, ciò che è anche sciocco è l'editor .m che si collega al method.m sul metodo (oggetto, arg1, .. ., argn) , mentre quando esegue il debug chiama il metodo Java.

È stato utile?

Soluzione

Potresti riscontrare dei problemi con il modo in cui MATLAB effettua il dispacciamento ...

Come faccio a sapere quale metodo verrà chiamato con lo stesso nome?

Questa sezione della documentazione MATLAB discute come viene scelta una funzione nei casi in cui ci sono più funzioni con lo stesso nome. Dalla documentazione: "L'ordine di precedenza delle funzioni determina la precedenza di una funzione rispetto ad un'altra in base al tipo di funzione e alla sua posizione sul percorso MATLAB." Questo ordine (dal più alto al più basso) è riportato di seguito:

  • Sottofunzione
  • Funzione privata
  • Costruttore di classe
  • Metodo di sovraccarico
  • Funzione nella directory corrente
  • Funziona altrove nel percorso

Il posizionamento del tuo " method.m " la funzione determinerà probabilmente se viene chiamata o viene chiamato il metodo Java quando si utilizza il metodo " (oggetto, ...) " sintassi.

Esiste un modo per assicurarmi di chiamare method.m anziché il metodo Java?

In questo momento, sto indovinando il tuo " method.m " si trova nella directory corrente o altrove nel percorso (le due posizioni di precedenza più basse in cui trovarsi). Se hai creato " method.m " una sottofunzione nel codice più grande chiamandola o se è possibile inserirlo in una directory privata dove può essere chiamato da ogni funzione che deve chiamarlo, quindi può essere chiamato invece di il metodo Java quando usi il metodo " (oggetto, ...) " ; sintassi.

Spero che questo aiuti!

Altri suggerimenti

Hmmmmmmmmm .... potresti provare a ottenere un handle di funzione usando @method e quindi chiamare feval () sull'handle della funzione.

Potrebbe funzionare ma non sono sicuro ....

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top