0

私はMATLABオブジェクト指向プログラミングに挑戦しています。プロパティを持つクラスがあります。NaNの場合はプロパティが計算され、そうでない場合はプロパティが返されます。

だから私はこのセクションを持っています:

properties 
 some_property = NaN;
end

プロパティは次のように計算されます。

function some_property = get_some_property(obj)

if(isnan(obj.some_property))

    % do some expensive computation
    obj.some_property = ...;

end

some_property = obj.some_property;

get_some_propertyメソッドは、別のget_some_propertyメソッドで使用できます。問題は、メソッド呼び出し間でプロパティがNaNに戻されることです。これにより、エラーが発生します。

最大再帰制限..。

何か案は?ありがとう。

4

1 に答える 1

2

問題は、クラスがから派生していないhandleため、値として渡されることです。これは、を呼び出すとget_some_property、Matlabが忠実に複製objし、関数にコピーを与え、それを呼び出しget_some_propertyたコードのコピーとは別に保持することを意味しますget_some_property。したがって、some_property関数を変更すると、関数get_some_propertyのの値のプロパティは変更されますが、それを呼び出したコードobjののプロパティは変更されません。obj

あなたの問題には2つの解決策があります。最良の解決策(IMO)は、からクラスを派生させることhandleです。から派生したクラスhandleは参照として渡されるため、でプロパティをobj変更すると、すべての場所でプロパティが変更されます。

ただし、これを実行したくない場合は、次のobj場所から戻ることができget_some_propertyます。

function [some_property,obj] = get_some_property(obj)

そして、次get_some_propertyのように呼び出します。

[property,obj] = get_some_property(obj);

objこれにより、呼び出し元の名前空間のの値が更新されます。それは厄介で不格好です。handleそれを避ける正当な理由がない限り、私はあなたのクラスを導き出します。

于 2012-07-10T18:05:35.797 に答える