【问题标题】:Looking for insight into undocumented use of MATLAB's methods() function寻找对 MATLAB 的 methods() 函数的未记录使用的洞察力
【发布时间】:2013-03-10 05:03:01
【问题描述】:

我查看了所有内容,但没有看到 [a b] = methods(classname) 记录在案。我的意思是,记录了单变量输出,但没有记录双变量输出。我在 MATLAB 或未记录的 matlab 中或 甚至在这里 中都没有看到任何文档。也许我错过了?

如果我用 matlab 类调用它,例如char

[a b] = methods(char); 

那么a就是char的方法列表,b就是[]

但是……

对于 java 类,b 具有一些有用的值。假设javaClass是一个java类或者java类名。

通常,我会致电a = method(javaClass)a = method(javaClass,'-full')。但是,我注意到我也可以打电话

[a b] = method(javaClass)

当我这样做时:

  • a 是一个包含所有类方法名称的唯一列表的单元格。 (如预期)
  • b 是一个 N x 6 的字符串单元格,每列代表:
    1. 'static' 如果是静态的,[] 否则
    2. 完全合格的返回类
    3. 方法名称
    4. 完全限定的方法名称
    5. 输入参数(括号内),或者只是()
    6. '抛出fully.qualified.exception.name',或[]

例子:

[a b] = method(java.lang.Integer);

那么,a 是一个 ,包含简单的名称,例如 'Integer''bitCount' 等。

但是,b 是一个 ,包含每个函数的每个变体。例如,其中一个 valueOf 函数会显示

COL  VALUE
1.   static
2.   java.lang.Integer
3.   valueOf
4.   java.lang.Integer.valueOf
5.   (java.lang.String)
6.   throws java.lang.NumberFormatException`

所以,这是我的问题:

主要问题:这完全不安全使用吗?因为它是无证的,所以我假设是这样;但是它为我提供了一些无需复制的内置功能。解析的变通方法并不令人讨厌,但这个功能已经在这里了。

这是从哪里来的?也就是说,这实际上是来自 MATLAB 函数,还是它正在使用一些 Java 函数?

有人用吗?或者(如在主要问题中)应该避免它吗?

有这方面的文档吗?除了这篇文章,我的意思是。我的意思是,当然,它似乎是一个直截了当的功能......而且这对任何人来说都足够有趣吗?

我使用的是 MATLAB 2011b,此功能是否仍然存在于更高版本的 MATLAB (2013a) 中?

【问题讨论】:

    标签: matlab matlab-class


    【解决方案1】:

    对于 MATLAB 自己的类(classdef 样式),您可以使用metadata system 获取类似信息:

    mc = ?timer
    mc.MethodList
    

    上面显示的methods 的使用似乎对Java 类和对象特别有用。检查内部使用methods的两个输出的methodsview函数的源代码。

    edit methodsview
    

    【讨论】:

    • 谢谢,阿姆罗。我从未听说过元数据系统。看起来它可能对我有用。很高兴知道[m d]=methods(...) 已融入 MATLAB。我仍然不确定我是否会在我的代码中使用它,但是——我可能会。
    【解决方案2】:

    Matlab 包含许多这样的无证掘金,自 2009 年以来,我一直在我的 UndocumentedMatlab.com 网站上记录这些数据(该网站在几天前迎来了它的 4 岁生日)。其中大部分与 Matlab-Java 接口有关(我在上面写了一个 book),但也有许多 pure-Matlab 未记录的特性和函数非常有用。

    就未来的 Matlab 兼容性而言,其中一些功能比其他功能更具风险。我认为methods 的第二个输出 arg 风险较低。它确实是无证的,但以目前的形式存在了很长时间(至少十年,可能更久)。从 R2013a 开始,它仍然可用。正如 Amro 所说,它由内部 methodsview 函数使用,使用起来完全安全。

    如果您有兴趣在 Matlab 中获取有关 Java 对象的信息,请考虑使用 uiinspectcheckClass 实用程序,它们提供的信息比 methodsmethodsview 多得多。 uiinspectcheckClass 都适用于多种类型的对象句柄和类名,包括 Java、COM、Matlab 类和 HG 句柄(HG 仅由 uiinspect 提供)。提供uiinspect 的技术描述here


    uiinspect 用于 Java、COM 和 Matlab 句柄:


    checkClass 用于 Java 对象或类名:

    【讨论】:

      猜你喜欢
      • 2018-05-12
      • 2020-04-08
      • 2018-12-28
      • 2020-09-26
      • 1970-01-01
      • 2021-02-10
      • 2011-01-26
      • 2021-09-12
      • 1970-01-01
      相关资源
      最近更新 更多