2012-01-10 99 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