从Matlab调用Java时如何避免歧义?
我刚从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);
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路径上的位置确定一个函数相对于另一个函数的优先级。”该顺序(从最高到最低)如下所示:
- 子功能
- 私人职能
- 类构造函数
- 重载方法
- 当前目录中的函数
- 在路径上的其他位置运行
希望这有帮助 hmmmmmmm。。。。您可以尝试使用
@method
获取函数句柄,然后调用函数句柄
这可能行得通,但我不确定……我感觉函数优先顺序仍然适用于获取函数句柄(即句柄可能仍然指向Java方法,而不是OPs重载方法.m)。但是我不太确定。我检查了文档()。。。“当您通过句柄计算重载函数时,句柄的参数将决定MATLAB分派给的实际函数。”该死的墨菲!=)我只是在我的.m文件中添加了一个前缀就解决了这个问题,我没想到会找到一个好的解决方案,我只是想看看是否有任何答案