2

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

4

2 回答 2

3

您可能会遇到一些关于 MATLAB 如何进行调度的问题......

我怎么知道在给定相同名称的情况下会调用哪个方法?

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

  • 子功能
  • 私有函数
  • 类构造函数
  • 重载方法
  • 当前目录中的函数
  • 路径上其他地方的功能

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

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

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

希望这可以帮助!

于 2009-03-17T22:41:50.503 回答
1

Hmmmmmmmmm.... you could try obtaining a function handle using @method and then call feval() on the function handle.

That might work but I'm not sure....

于 2009-03-18T00:10:16.500 回答