1

次のMATLABコードは機能しません。関数チェンジャーでは、MATLABは値を同じに設定するだけでなく、オブジェクトAを等しくしようとします。Bそのための回避策はありますか?

classdef foo
    %FOO Summary of this class goes here
    %   Detailed explanation goes here

    properties
        A=5
        B=0
    end

    methods
        function changer(obj)
            obj.B=obj.A
        end
    end

end
4

1 に答える 1

5

コードは実際には正常に機能していると思いますが、期待どおりに機能していません。

定義した方法fooクラスであるため、参照(または処理)セマンティクスではなく、値セマンティクスがあります。を実行するchanger(myobj)と、MATLABは新しい値Bを使用してmyobjのコピーを作成し、それを返します。オリジナルmyobjは変更されません。changer値クラスを実装する場合、通常、この新しいコピーをさらに処理できるようにするために、に出力引数を追加します。

function obj = changer(obj)

fooをハンドルクラスに設定した場合、以下から継承しhandleます。

classdef foo<handle

次に、参照(またはハンドル)セマンティクスがあり、元のセマンティクスmyobjが変更されます(その後、からの出力引数は不要になりますchanger)。

>> myobj = foo;
>> changer(myobj); % or alternatively myobj.changer
>> myobj.B
ans =
     5
于 2011-11-29T17:29:56.643 に答える