我刚刚发现从Matlab调用Java时
object.method(arg1,...,argn)
相当于
method(object, arg1,...,argn)
这里的问题是我还有method.m
从Java到Matlab的一些翻译(例如,将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方法?很容易确保调用Java方法,只需使用object.method
语法。
作为旁注,同样愚蠢的是.m
编辑器链接到method.m
调用上的method(object, arg1,...,argn)
,而调试它时调用Java方法。
答案 0 :(得分:3)
您可能遇到MATLAB调度的一些问题......
如何知道在同名的情况下调用哪种方法?
MATLAB文档的This section讨论了在有多个具有相同名称的函数的情况下如何选择函数。从文档:“函数优先顺序根据函数的类型及其在MATLAB路径上的位置确定一个函数优先于另一个函数。”这个顺序(从最高到最低)如下:
“method.m”函数的放置可能会决定在使用“method(object,...)”语法时是调用它还是调用Java方法。
有没有办法确保我调用method.m而不是Java方法?
现在,我猜你的“method.m”在当前目录或路径的其他位置(两个最低优先级位置)。如果您在调用它的较大代码中将“method.m”设为subfunction,或者如果可以将其放在private directory中,可以由需要调用它的每个函数调用它,那么当您使用“method(object,...)”语法时,它可能被称为而不是 Java方法。
希望这有帮助!
答案 1 :(得分:1)
嗯嗯......您可以尝试使用@method
获取函数句柄,然后在函数句柄上调用feval()
。
那可能有用,但我不确定......