Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Matlab调用Java时如何避免歧义?_Java_Matlab_Methods_Ambiguity - Fatal编程技术网

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

从Matlab调用Java时如何避免歧义?,java,matlab,methods,ambiguity,Java,Matlab,Methods,Ambiguity,我刚从Matlab调用Java时发现 object.method(arg1,...,argn) 相当于 method(object, arg1,...,argn) 这里的问题是,我还有一个method.m,它可以将Java转换为Matlab(例如,将String[]转换为字符串单元格)。我的方法.m看起来像 function result = method(object, arg1,...argn) intermediate = object.method(arg1,...argn);

我刚从Matlab调用Java时发现

object.method(arg1,...,argn)
相当于

method(object, arg1,...,argn)
这里的问题是,我还有一个
method.m
,它可以将Java转换为Matlab(例如,将
String[]
转换为字符串单元格)。我的
方法.m
看起来像

function result = method(object, arg1,...argn)
  intermediate = object.method(arg1,...argn);
  result = translate(intermediate);
当我调用
方法(object,arg1,…,argn)
时,它执行直接Java调用,而不是使用我的
方法。m

修复很简单,只是不要对Java方法和
.m
文件使用相同的方法名但是还有别的办法吗?如何知道使用相同名称调用哪个方法?有没有办法确保我调用
method.m
而不是Java方法?
确保调用Java方法很容易,只需使用
object.method
语法即可


顺便说一句,同样愚蠢的是
.m
编辑器链接到
方法(object,arg1,…,argn)
调用上的
方法.m
,而当它调试时调用Java方法。

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

如果名称相同,我如何知道将调用哪个方法?

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

  • 子功能
  • 私人职能
  • 类构造函数
  • 重载方法
  • 当前目录中的函数
  • 在路径上的其他位置运行
“method.m”函数的位置很可能决定在使用“method(object,…”语法时是调用它还是调用Java方法

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

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


希望这有帮助

hmmmmmmm。。。。您可以尝试使用
@method
获取函数句柄,然后调用函数句柄


这可能行得通,但我不确定……

我感觉函数优先顺序仍然适用于获取函数句柄(即句柄可能仍然指向Java方法,而不是OPs重载方法.m)。但是我不太确定。我检查了文档()。。。“当您通过句柄计算重载函数时,句柄的参数将决定MATLAB分派给的实际函数。”该死的墨菲!=)我只是在我的.m文件中添加了一个前缀就解决了这个问题,我没想到会找到一个好的解决方案,我只是想看看是否有任何答案