我刚刚发现从Matlab调用Java时
object.method(arg1,...,argn) 相当于
method(object, arg1,...,argn) 这里的问题是我还有一个method.m ,它可以完成从Java到Matlab的一些转换(例如,将String[]转换为String[]单元格)。我的method.m看起来像
function result = method(object, arg1,...argn) intermediate = object.method(arg1,...argn); result = translate(intermediate); 发生的是当我调用method(object, arg1,...,argn) ,它直接进行Java调用,而不是使用我的method.m
修复很容易,只是不要对Java方法和.m文件使用相同的方法名称。
但是还有另一种方法吗?我怎么知道给定相同名称的方法?有没有办法确保我调用method.m而不是Java方法?只需使用object.method语法即可轻松确保对Java方法的调用。
作为一个侧面说明,什么也傻是.m编辑器链接到method.m的method(object, arg1,...,argn)呼叫,而当它调试它调用的Java方法。
回答:
您可能会在MATLAB如何进行分派方面遇到一些问题...
我怎么知道给定相同名称的方法?
MATLAB文档的
这一部分讨论了在存在多个具有相同名称的函数的情况下如何选择函数。在文档中:“函数优先级顺序根据函数的类型及其在MATLAB路径上的位置确定一个函数相对于另一个函数的优先级。”该顺序(从最高到最低)如下:
- 子功能
- 私人功能
- 类构造器
- 重载方法
- 当前目录中的功能
- 在路径上的其他地方起作用
使用“ method(object,...)”语法时,“ method.m”函数的位置将很可能确定它是被调用还是Java方法被调用。
有没有办法确保我调用method.m而不是Java方法?
现在,我猜您的“ method.m”在当前目录中或路径的其他位置(要插入的两个最低优先级位置)。如果您在较大的代码中将“ method.m”作为
子函数进行调用,或者可以将其放置在
私有目录中 ,则每个需要调用该函数的函数都可以将其调用,那么它可能会被
代替使用“ method(object,...)”语法时的Java方法。
希望这可以帮助!
更多&回答...