2010-06-08 63 views
4

說我有一個類文件動態字段添加到對象在MATLAB

classdef foo 

    properties 
     bar 
    end 

end 

定義的MATLAB對象,並創建一個Foo對象

myfoo = foo(); 

現在我想添加一個字段動態地獲取。我想要的是

myfoo.newfield = 42; 

但這會引發錯誤。

我知道有一種方法可以動態地將一個字段/屬性添加到MATLAB對象中,但我無法記住它或在幫助中輕鬆找到它。任何人都知道語法?

回答

6

好的,找到它。但它不是一般的,只有dynamicprops類的子類實現它。 這是我記得遇到的。所以我懷疑這個問題的一般答案是你不能這樣做。

任何屬於dynamicprops類(它本身就是句柄類的子類)的子類都可以使用addprop方法定義動態屬性。語法是:

P = addprop(H,'PropertyName') 
+1

此行爲在我看來是非常理想的行爲。如果可以隨意地將屬性添加到任何類中,則可能會失去很多健壯性。 如果你有,你想使一個dynamicprops類,而無需修改其現有的類,你可以繼承這兩個foo和dynamicprops: 'classdef dynamicfoo RjOllos 2010-06-11 01:40:14

+0

我不認爲有很多健壯的開始。對屬性的數量和名稱的限制與matlab沒有的強類型差不多。通過動態添加一個字段,你會失去什麼 - 這不會破壞任何不知道該字段的現有代碼。但是,如果「方形」應該是「形狀」,則可以說obj.square = 3並打破依賴於「方形」爲「形狀」的現有代碼。 這樣做的原因是更改已經在內存中的類,而不必清除並重新加載該類的所有實例。 – Marc 2010-06-11 12:32:20

+2

在你6月11日的評論中,你問「通過動態添加字段失去了什麼[?]」有一件事是錯誤檢查 - 通常,如果你有一個Circle對象,你真的*不想*指定一個哦,讓我們說)「溫度」。如果你寫這樣的代碼... x = Circle(); ...很多代碼,函數調用等... x.temperature = 98.6;可能性是你在某個地方犯了一個錯誤。因此,查看DYNAMICPROPS類的一種方式是說:「嘿,以後不要再錯誤地檢查這個對象,如果我分配給一個壞的屬性,請相信我,我知道我在做什麼。 「由你決定是否你想這樣做。 – 2011-12-20 06:23:04