4

MATLAB で次のおもちゃのクラスを作成するとします。

classdef testIt
    properties
        a
        b
        c
    end
    methods
        function obj = testIt
            obj.a = 1;
            obj.b = 2;
        end

        function obj = set.a(obj,a)
            obj.a = a;
        end

        function obj = set.b(obj,b)
            obj.b = b;
        end

        function obj = addup(obj)
            obj.c = obj.a + obj.b;
        end
    end
end

addup次に、メソッドをインスタンス化して呼び出します。

>> aTest = testIt

Properties:
a: 1
b: 2
c: []

>> aTest.addup

Properties:
a: 1
b: 2
c: 3

>> aTest

Properties:
a: 1
b: 2
c: []

プロパティcは作成されていません。代わりに、次の構文を使用する必要があります。

>> aTest = aTest.addup

>> aTest

Properties:
a: 1
b: 2
c: 3

なぜこれが必要なのか誰にも説明できますか?

4

2 に答える 2

8

Matlab は、ハンドル クラス値クラスの 2 種類のクラスをサポートしています。

値クラスは、値によって渡されるという点で、構造体やその他の Matlab 変数と同様に動作します。したがって、関数内の値クラスのインスタンスを変更する場合は、呼び出し元のワークスペースでインスタンスを返し、上書きする必要があります。

一方、ハンドル クラスは参照によって渡されます。どこかでプロパティの値を変更すると、すべてのワークスペースでクラスが更新されます。たとえば、ベース ワークスペース内のオブジェクトへの参照と、GUI 内のオブジェクトへの参照を持つことができます。一方を変更すると、それに応じて他方の値が変更されます。

コードを に変更するclassdef testIt < handleと、オブジェクトは期待どおりに動作します。

また:ドキュメントを見てください

于 2012-12-13T20:12:55.893 に答える
0

クラス定義に追加します。

classdef testIt < handle
于 2012-12-13T20:11:56.957 に答える