2012-01-10 96 views
1

如何从其内容动态创建类?实际上我创建了一种Matlab引擎类实例化和执行,其中我可以列出目录中的所有类文件(* .m),实例化它们(使用'eval(clasnname)')并使用这些对象。动态类生成

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

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

有人知道该怎么做吗?

回答

2

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

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

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

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

+0

好吧,你是对的。我必须写一个classdef文件。所以我试试这个......将内容写入相应的文件,通过eval(classname)加载它,然后...删除文件;这是行不通的。 Matlab真的需要在使用该类时存在te文件(为什么?为什么它不会将classdef加载到内存中?每次调用类的函数时都必须解析和分析文件...)。所以我刚刚在程序结束时删除了最新的文件。 – Alexxx 2012-01-11 07:26:38

+0

它需要存在该文件,以便它可以检查没有任何更改。 – Nzbuu 2012-01-11 11:02:42

0

当然,你可以在matlab中创建一个动态类,通过继承dynamicprops,甚至可以从字符串创建一个完整的类,如文件或JSON或其他。看我的例子myDynamicClass on FEX