1

書式設定について申し訳ありません。{} コントロールを貼り付けてから適用しましたが、まだ壊れているように見えます。ツールを何らかの形で誤用している場合は、教えてください。

私は基本クラスを持っています:

classdef SystemNode < matlab.mixin.Heterogeneous
    properties (Abstract)
       description 
       quantity
       parent 
       unit_cost
       learning_curve
       average_cost
       total_cost
       children
   end
end

私には子孫がいます:

classdef Subsystem < models.system.SystemNode
   properties
       description 
       quantity
       parent 
       children
       key
   end

   properties (Dependent)
       unit_cost
       learning_curve
       average_cost
       total_cost
   end

   methods
       function self = Subsystem(description, quantity, parent)
           % TODO: Validate Inputs
           self.description = description;
           self.quantity = quantity;
           self.parent = parent;
           self.children = [];
           self.key = char(java.util.UUID.randomUUID().toString());
       end

       function add_child(self, node)
           % TODO: Validate Inputs
           self.children = [self.children node];
       end

       function unit_cost = get.unit_cost(self)
           % Cost if there were only one.
           unit_cost = 0;
           for child = self.children
               unit_cost = child.unit_cost;
           end
           unit_cost = unit_cost*self.quantity;
       end

       function learning_curve = get.learning_curve(self)
           learning_curve = 0;



       end

.add_child() を動作させることができません。例えば:

>> ss = models.system.Subsystem('test', 1, []);
>> ss.add_child('a')
>> ss.children

ans =

     []

Mixin の代わりにハンドルから抽象クラスを派生させると、これは正常に機能します。私は何を間違っていますか??

ところで。私はMatlab 2011bを使用しています

前もって感謝します。

4

1 に答える 1

2

これhandleは、オブジェクトが参照渡しの方法で動作するようにするためです。この種の動作が必要な場合は、次のことを試してください。

classdef SystemNode < matlab.mixin.Heterogeneous & handle

から継承しない場合handle、通常の Matlab の値渡しの動作が得られます。この場合、オブジェクトの状態を更新する場合は、setter メソッドから更新されたオブジェクトを返し、返された更新された値を格納する必要があります。

そのため、セッターは更新された自己を返す必要があります。

   function self = add_child(self, node)
       self.children = [self.children node];
   end

そしてそれを呼び出すと、返された更新されたオブジェクトが格納されます。

ss = ss.add_child('a')

に新しい値を保存しない場合は、子を持たない呼び出し前ssの from の値を見ていることになります。ssadd_child

于 2013-04-25T22:20:33.623 に答える