2017-04-06 10 views
0

我在Matlab中創建了一個異類對象數組,該類來源於matlab.mixin.Heterogeneous類。我的數組現在包含超類Cells的對象和Neuron,Astrocyte等子類。 我想分配給我的子類的方法應該根據不同的激勵來模擬它們的行爲。爲了計算行爲,我需要對象來執行數學運算。但是,當我定義使用運營商在類的方法的功能,Matlab的告訴我,例如爲:異構數組中的數學運算(Matlab)

未定義操作「 - 」類型的輸入參數的「細胞」。

然後我試圖構建我有多個繼承(Cells < matlab.mixin.Heterogeneous & double)超類,但隨後會出現這樣的錯誤:

使用錯誤細胞: 類「細胞」不能是 matlab.mixin的子類。異構並且繼承 類'double'的'subsasgn'方法。

這並不奇怪,因爲它在 'matlab.mixin.Heterogeneous'

不能覆蓋在你的子類下面的方法描述說:

...

subsasgn

因爲我唯一的想法是定義方法s作爲類之外的函數,我想問一下是否有可能在異構對象數組中執行數學運算。

+1

您需要爲您的類定義運算符。 'minus'將定義'-' – Suever

回答

0

您需要將算術運算符定義爲類的方法,否則它們將無法在您的自定義類上運行。例如,爲了支持減法,你需要重載minus爲類

methods 
    function self = minus(self, other) 
     % Loop through the array and apply the - operator to each 
     for k = 1:numel(self) 
      self(k).prop1 = self(k).prop1 - other.prop1; 
      self(k).prop2 = self(k).prop2 - other.prop2; 
     end 
    end 
end 

請注意,您的異構陣列minus方法需要確保不同類別的self元素被適當處理。

可以找到所有算術運算符方法的列表here

+0

當我將它添加到我的「Cells」超類的方法部分時,它說:從單元轉換爲double是不可能的。 – Phil

+0

@ P.Hornauer對。這是一個例子。你必須*以某種方式將你的'Cells'類轉換成你可以進行算術運算的類。 「細胞」類的實際「價值」是什麼,以及你期望'-'表現如何? – Suever

+0

對不起,我的錯。我的'Cells'類包含所有類的所有屬性,因爲我想對它們進行計算。所以我基本上希望操作員像往常一樣行事。但我真的不知道該怎麼做。 – Phil