2016-08-25 62 views
1

我在我的許多MATLAB軟件包中定義了一個類。令我驚訝的是,我無法在不導入類定義的情況下訪問我的類的常量屬性。即使它是類本身的一種方法。像這樣:導入類訪問常量值

classdef TestClass 

    properties(Constant) 

     c=0; 
    end 

    methods 

     function obj = TestClass()   
     end 

     function getC(obj) 

      import test.TestClass; 
      disp(TestClass.c); 
     end 
    end  
end 

我只是想檢查我在這裏做錯了什麼,或者這是在MATLAB中使用常量的正確方法。

+0

爲什麼你需要'getC'訪問一個恆定值?沒有'函數getC ...'我可以鍵入'TestClass.c'並返回'0'。如果你想直接調用類getC,它需要是一個靜態方法。 –

回答

1

由於您已將TestClass放入包中,Matlab需要知道在哪裏尋找該類的定義,即使它是類或函數內的引用。上述代碼的替代可能是:

function getC(obj) 
     disp(test.TestClass.c); 
    end 

或者,如果在一個類內,可以從對象本身訪問常量值。

function getC(obj) 
     disp(obj.c); 
    end 

如果這些都不適用於您,您可能需要從內存刷新TestClass的classdef。這將導致matlab重新加載常量值,當它首次解析classdef文件以確定類的結構時,該常量值被拉入Matlab中。這可以使用clear classes來完成,但警告它也會清除所有其他類,變量以及您設置的任何斷點。

如果您想查看是否有必要,您可以查看元類對象以確定Matlab「認爲」您的類結構應該是什麼。你可以用下面的方法來做到這一點。

mc = ?test.TestClass; 
mc.PropertyList 

您可能需要索引到屬性列表以找到您感興趣的特定屬性,但是您要查找的是以下字段。

  • 名稱: 'C'
  • 恆:1
  • 默認值:0