从Matlab调用Java时如何避免歧义?

我刚发现从Matlab调用Java时

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

相当于

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

这里的问题是我还有一个方法method.m ,它从Java到Matlab进行一些翻译(例如,将String[]转换为String[]单元格)。 我的方法看起来像

 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 Editor链接到method.m上的method(object, arg1,...,argn)调用,而在调试它时调用Java方法。

您可能遇到MATLAB执行调度的一些问题……

如何知道在同名的情况下调用哪种方法?

MATLAB文档的这一部分讨论了在多个具有相同名称的函数的情况下如何选择函数。 从文档:“函数优先顺序根据函数的类型及其在MATLAB路径上的位置确定一个函数优先于另一个函数。” 这个顺序(从最高到最低)如下:

  • 子function
  • 私人function
  • 类构造函数
  • 重载方法
  • 当前目录中的function
  • 路径上的其他function

“method.m”函数的放置可能会决定在使用“method(object,…)”语法时是调用它还是调用Java方法。

有没有办法确保我调用method.m而不是Java方法?

现在,我猜你的“method.m”在当前目录或路径上的其他位置(两个最低优先级位置)。 如果你把“method.m”作为调用它的较大代码中的一个子函数 ,或者如果可以把它放在一个私有目录中,每个需要调用它的函数都可以调用它,那么就可以调用它而不是使用“方法(对象,…)”语法时的Java方法。

希望这可以帮助!

嗯嗯…你可以尝试使用@method获取一个函数句柄,然后在函数句柄上调用feval()

这可能会奏效,但我不确定……