动态类生成

时间:2012-01-10 15:27:34

标签: matlab reflection

如何从内容中动态创建一个类?

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

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

所以我编写了一个函数来将文件内容读入一个字符串,替换/添加一些内容到这个字符串中......我不知道如何创建一个对象(一个类的实例) string(包含'classdef myClass< myMotherClass \ n ... end')。 (我知道我可以使用此字符串内容在我的文件系统上创建一个新文件,然后使用eval(...),但我尝试在不创建新物理文件的情况下执行此操作。)

有人知道怎么做吗?

3 个答案:

答案 0 :(得分:2)

我不认为这在MATLAB中是可行的,不像Ruby这样的纯面向对象编程语言。如果是,那么会有一些构建meta.class对象的方法,但事实并非如此。

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

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

除了:使用feval而不是eval来创建新课程的实例。

答案 1 :(得分:2)

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

答案 2 :(得分:0)

当然可以通过子类化到dynamicprops在matlab中创建动态类,甚至可以从字符串创建整个类,比如文件或JSON等。请参阅myDynamicClass

上的示例FEX