2012-08-22 53 views
0

我使用預先存在的代碼被組織成類MATLAB。它不使用classdef,而是使用@文件夾。我不完全確定它是如何工作的,並且它給我帶來了一些麻煩。Matlab的@folder類屬性混淆

構造函數的格式如下:

function this = crazy_class(varargin) 

    this.a = []; 
    this.b = []; 
    this = class(this, 'crazy_class'); 

end 

我需要一個新的屬性添加到類,但如果我修改它像這樣:

function this = crazy_class(varargin) 

    this.a = []; 
    this.b = []; 
    this.newProperty = []; 
    this = class(this, 'crazy_class'); 

end 

我得到如下:

Number of fields for class crazy_class cannot be changed without clear classes. 

它不喜歡我爲類添加一個新的未指定的屬性。很公平,如果有classdef,添加一個新屬性會很簡單,但是我不知道如何用@folder格式來做到這一點。

沒有.m文件,或指定的類中的任何屬性的文件夾在這個問題上的任何文件。我能找到的最接近的是重載函數:

subsasgn.m:

this = builtin('subsasgn', this, selector, value); 

subsref.m:

r = builtin('subsref', this, selector); 

但僅此而已。這個類如何知道什麼是有效的屬性,什麼時候沒有在任何其他文件中提及。我應該尋找什麼來改變這一點?

編輯:嗯,這是令人尷尬的......我重新啓動Matlab和現在一切正常。我認爲通過輸入命令清除類,或清除所有會做的伎倆,但我想它需要一個完整的重新啓動。

回答

2

的一點是,你現在必須執行命令「清除類」,因爲有現成的類成員的舊格式。 MATLAB自己告訴你這個事實。這些屬性在crazy_class.m文件中定義。

1

你用「舊式」面向對象的代碼在這裏工作。 MATLAB 7.6引入了'新風格'面向對象的語法(使用classdef等),但在此之前,您可以使用您正在使用的風格,但仍然支持但已過時。

我建議你看一看過時的文件,這仍然是可用here。它將解釋語法的細節,以及如何使用這些類。