Pergunta

Eu só descobri que quando chamado Java do Matlab

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

é equivalente a

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

O problema aqui é que eu também tenho um method.m que faz alguma tradução de Java para Matlab (eg. Converso String[] a célula de cordas). Meus method.m parece com

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

O que está acontecendo é quando eu chamo method(object, arg1,...,argn), ele faz a chamada Java direta, em vez do meu usando meu method.m

A correção é fácil, basta não usar o mesmo nome do método para ambos os meus métodos Java e meus arquivos .m. Mas existe outra maneira? Como faço para saber qual o método será chamado dado o mesmo nome? Existe uma maneira de garantir que chamo method.m em vez do método Java? É fácil para garantir uma chamada para o método Java, basta usar a sintaxe object.method.

Como uma nota lateral, o que também é bobo é as ligações editor .m ao method.m na chamada method(object, arg1,...,argn), enquanto quando se depura ele chama o método Java.

Foi útil?

Solução

Você pode estar correndo em alguns problemas com a forma como MATLAB faz despacho ...

Como faço para saber qual o método será chamado dado o mesmo nome?

Esta seção das discute documentação MATLAB como uma função é escolhido nos casos em que existem múltiplas funções com o mesmo nome. A partir da documentação: "A ordem de precedência função determina a precedência de uma função em detrimento de outro com base no tipo de função e sua localização no caminho MATLAB." Esta ordem (do maior para o menor) é dado abaixo:

  • Subfunção
  • Função Privada
  • Class construtor
  • método sobrecarregado
  • Função no diretório atual
  • Função outros lugares no caminho

A colocação da função sua "method.m" provavelmente vai determinar se ele é chamado ou o método Java é chamado quando usando o "método (object, ...)" sintaxe.

Existe uma maneira de garantir que chamo method.m em vez do método Java?

Agora, eu estou supondo que o seu "method.m" está no diretório atual ou em outra parte do caminho (as duas posições de precedência mais baixas para a). Se você fez "method.m" um subfunção no código maior chamando-o, ou se é possível colocá-lo em uma diretório privado onde ele pode ser chamado por todas as funções que as necessidades de chamá-lo, então ele pode ter chamado em vez de o método Java quando você usa o "método ( object, ...)" sintaxe.

Espero que isso ajude!

Outras dicas

Hmmmmmmmmm .... você poderia tentar obter um identificador função usando @method e depois chamar feval() no punho função.

Esse trabalho força, mas eu não tenho certeza ....

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top