登录论坛

查看完整版本 : 从Matlab调用Java时如何避免歧义?


poster
2019-12-10, 16:49
我刚刚发现从Matlab调用Java时

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

method(object, arg1,...,argn) 这里的问题是我还有一个method.m ,它可以完成从Java到Matlab的一些转换(例如,将String[]转换为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方法?只需使用object.method语法即可轻松确保对Java方法的调用。

作为一个侧面说明,什么也傻是.m编辑器链接到method.m的method(object, arg1,...,argn)呼叫,而当它调试它调用的Java方法。


回答:
您可能会在MATLAB如何进行分派方面遇到一些问题...

我怎么知道给定相同名称的方法?

MATLAB文档的这一部分 (http://www.mathworks.com/access/helpdesk/help/techdoc/matlab_prog/f7-58170.html#bresuvu-3)讨论了在存在多个具有相同名称的函数的情况下如何选择函数。在文档中:“函数优先级顺序根据函数的类型及其在MATLAB路径上的位置确定一个函数相对于另一个函数的优先级。”该顺序(从最高到最低)如下:


子功能
私人功能
类构造器
重载方法
当前目录中的功能
在路径上的其他地方起作用
使用“ method(object,...)”语法时,“ method.m”函数的位置将很可能确定它是被调用还是Java方法被调用。

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

现在,我猜您的“ method.m”在当前目录中或路径的其他位置(要插入的两个最低优先级位置)。如果您在较大的代码中将“ method.m”作为子函数 (http://www.mathworks.com/access/helpdesk/help/techdoc/matlab_prog/f4-70666.html)进行调用,或者可以将其放置在私有目录中 (http://www.mathworks.com/access/helpdesk/help/techdoc/matlab_prog/f4-70335.html) ,则每个需要调用该函数的函数都可以将其调用,那么它可能会被代替使用“ method(object,...)”语法时的Java方法。

希望这可以帮助!



更多&回答... (https://stackoverflow.com/questions/656014)