Pregunta

Acabo de descubrir eso al llamar a Java desde Matlab

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

es equivalente a

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

El problema aquí es que también tengo un method.m que hace algunas traducciones de Java a Matlab (por ejemplo, convertir String [] en una celda de cadenas). Mi method.m se parece a

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

Lo que sucede es que cuando llamo al método (objeto, arg1, ..., argn) , realiza la llamada directa a Java, en lugar de usar mi método .m

La solución es fácil, simplemente no use el mismo nombre de método tanto para mis métodos Java como para mis archivos .m . ¿Pero hay otra manera? ¿Cómo sé qué método se llamará con el mismo nombre? ¿Hay alguna manera de garantizar que llame al method.m en lugar del método Java? Es fácil asegurar una llamada al método Java, solo use el object.method sintaxis.

Como nota al margen, lo que también es tonto son los enlaces del editor .m al method.m en el método (object, arg1, .. ., argn) , mientras que cuando se depura llama al método Java.

¿Fue útil?

Solución

Es posible que tenga algunos problemas con la forma en que MATLAB realiza el envío ...

¿Cómo sé qué método se llamará con el mismo nombre?

Esta sección de la documentación de MATLAB discute cómo se elige una función en los casos en que hay múltiples funciones con el mismo nombre. De la documentación: "El orden de precedencia de la función determina la precedencia de una función sobre otra en función del tipo de función y su ubicación en la ruta de MATLAB". Este orden (de mayor a menor) se detalla a continuación:

  • Subfunción
  • Función privada
  • Constructor de clase
  • Método sobrecargado
  • Función en el directorio actual
  • Función en otra parte del camino

La ubicación de su " método.m " la función probablemente determinará si se llama o si se llama al método Java cuando se utiliza el método " (objeto, ...) " sintaxis.

¿Hay alguna manera de asegurarme de que llame a method.m en lugar del método Java?

En este momento, estoy adivinando tu " método.m " está en el directorio actual o en otra parte de la ruta (las dos posiciones de precedencia más bajas en las que se debe estar). Si hiciste " method.m " una subfunción en el código más grande que lo llama , o si es posible ponerlo en un directorio privado donde puede ser llamado por cada función que necesita llamarlo, entonces puede llamarse en lugar de el método Java cuando usa el método "(objeto, ...)" ; sintaxis.

¡Espero que esto ayude!

Otros consejos

Hmmmmmmmmm ... podría intentar obtener un identificador de función usando @method y luego llamar a feval () en el controlador de función.

Eso podría funcionar pero no estoy seguro ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top