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

时间:2009-03-17 21:06:07

标签: java matlab methods ambiguity

我刚刚发现从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方法。

2 个答案:

答案 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()

那可能有用,但我不确定......