代码之家  ›  专栏  ›  技术社区  ›  Pyrolistical

如何从MATLAB调用Java避免歧义?

  •  2
  • Pyrolistical  · 技术社区  · 15 年前

    我刚刚发现当从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);
    

    我打电话的时候发生了什么事 method(object, arg1,...,argn) 它直接调用Java,而不是使用我的 方法M

    修复很容易,只是不要为我的Java方法和我的方法使用相同的方法名称。 .m 文件夹。 但是还有别的办法吗?如何知道将使用相同的名称调用哪个方法?有办法确保我打电话来吗 方法M 而不是Java方法? 它很容易确保调用Java方法,只需使用 object.method 语法。

    作为旁注,愚蠢的是 m 编辑器链接到 方法M 方法(对象,arg1,…,argn) 调用,而在调试时调用Java方法。

    2 回复  |  直到 15 年前
        1
  •  3
  •   gnovice    15 年前

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

    如何知道将使用相同的名称调用哪个方法?

    This section 在matlab文档中,讨论了在多个同名函数的情况下如何选择函数。根据文档:“函数优先级顺序根据函数类型及其在matlab路径上的位置确定一个函数对另一个函数的优先级。”下面给出了该顺序(从高到低):

    • 子函数
    • 私人职能
    • 类构造函数
    • 重载方法
    • 当前目录中的函数
    • 路径上其他位置的函数

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

    有没有办法确保我调用方法M而不是Java方法?

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

    希望这有帮助!

        2
  •  1
  •   Jason S    15 年前

    嗯…您可以尝试使用 @method 然后打电话 feval() 在功能手柄上。

    这可能有效,但我不确定……