【问题标题】:dynamic class generation动态类生成
【发布时间】:2012-02-07 00:15:07
【问题描述】:

如何根据内容动态创建类?

事实上,我已经创建了一种 Matlab 引擎类实例化和执行,我可以在其中列出一个目录中的所有类文件 (*.m),实例化它们(使用 'eval(clasnname)')并使用这些对象。

现在我想“即时”更改这些文件的文件内容,然后实例化它们并使用这些新对象。

所以我编写了一个函数来将文件的内容读入一个字符串,将一些内容替换/添加到这个字符串中,然后......我不知道如何从中创建一个对象(类的实例)字符串(其中包含 'classdef myClass

有人知道怎么做吗?

【问题讨论】:

    标签: matlab reflection


    【解决方案1】:

    我认为这在 MATLAB 中是不可能的,这与像 Ruby 这样的纯面向对象编程语言不同。如果是,那么将有某种方法可以构建 meta.class 对象,但没有。

    我认为编写classdef 文件是您唯一的选择。您可能需要以编程方式调用 rehash 以使其加载新定义,如果存在使用旧定义的现有对象,则在清除所有内容之前它根本不会加载新定义。

    我想真正的问题是“你为什么需要这样做?”

    旁白:使用feval 而不是eval 来创建新类的实例。

    【讨论】:

    • 好吧,你是对的。我必须写一个classdef文件。所以我尝试了这个..将内容写入适当的文件,通过 eval(classname) 加载它,然后...删除文件;这是行不通的。 Matlab在使用该类时确实需要该te文件存在(为什么?为什么不将classdef加载到内存中?它必须解析并解析和解析......每次调用该类的函数时该文件?)。所以我刚刚在我的程序结束时删除了最新的文件。
    • 它需要存在文件,以便它可以检查没有任何变化。
    【解决方案2】:

    MATLAB 允许您在运行时通过添加 dynamic properties 来修改对象实例,但您不能添加方法。

    【讨论】:

      【解决方案3】:

      是的,当然你可以在 matlab 中创建一个动态类,通过子类化为 dynamicprops,你甚至可以从一个字符串创建一个完整的类,比如一个文件或 JSON 等等。在FEX 上查看我的示例myDynamicClass

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-03-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-30
        • 2012-07-24
        • 2011-11-23
        • 1970-01-01
        相关资源
        最近更新 更多