MATLABクラスオブジェクトは更新されていません

AFPP

いくつかのプロパティとメソッドを持つ単純なMATLABクラスを作成しています。クラスのコンストラクターは、プロパティをデフォルト値で初期化します。クラスのメソッドは、クラスのプロパティを更新するために、クラスが構築された後に追加の入力を取得します。

classdef classTest
    properties
        p1
        p2
        p3
        p4
    end

    methods

        function obj = classTest()
            obj.p1 = 0;
            obj.p2 = 0;
            obj.p3 = [];
            obj.p4 = '';
        end

        function obj = updateSomeProperties( obj, p1 )
            obj.p1 = p1;
        end
    end

end

ただし、クラスのメソッドを呼び出すと、プロパティが更新されません。

>> b = classTest

b = 

  classTest with properties:

    p1: 0
    p2: 0
    p3: []
    p4: ''

>> b.updateSomeProperties(10)

ans = 

  classTest with properties:

    p1: 10
    p2: 0
    p3: []
    p4: ''

>> b % still used the default values.

b = 

  classTest with properties:

    p1: 0
    p2: 0
    p3: []
    p4: ''

クラスのメソッドを呼び出した後、クラスオブジェクトをb更新してもupdateSomeProperties更新されない理由を知りたいと思いました

Suever

問題は、クラスが(それ自体のメソッドにさえ)コピーとして渡されるクラスであるということです。これは、すべての基本的なMATLABデータ型であるため、MATLABクラスのデフォルトの動作ですへの呼び出しの出力を調べることで、これが当てはまることを確認できますupdateSomeProperties()返された結果(として表示ans)には、期待する変更が含まれていますが、これらの変更は元のオブジェクトには存在しませんb値クラスを使い続けたい場合は、メソッドから新しいオブジェクトを返し、メソッドを呼び出すときに変数を再割り当てする必要があります。

b = classTest();
b = b.updateSomeProperties(10);

必要なのは、常に参照によって渡されるハンドルクラスです。これにより、メソッドは元のオブジェクトのコピーを変更するのではなく同じオブジェクトを操作できます。

これを行うには、組み込みhandleクラスから継承する必要があります

classdef classTest < handle

ドキュメントには、ハンドルクラスと値クラスの詳細な比較があります

補足として、コンストラクターですべてのデフォルトのプロパティ値を手動で設定するのではなく、propertiesブロック自体の中でこれらのデフォルトを簡単に指定することができます

properties
    p1 = 0;
    p2 = 0;
    p3 = [];
    p4 = '';
end

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

クラスオブジェクトは印刷されません

分類Dev

Javaグラフィックスオブジェクトが更新されていませんか?

分類Dev

演算子「[]」は、クラス「オブジェクト」に対して定義されていません。ダート

分類Dev

Angularサービスの公開オブジェクトリテラルが更新されていませんか?

分類Dev

C ++エラー:抽象クラスタイプのオブジェクトは許可されていません

分類Dev

オブジェクト<name>は宣言されていません

分類Dev

管理されていないオブジェクトを更新できません

分類Dev

エラー:「オブジェクト」はこのスコープで宣言されていません(C ++)

分類Dev

孫オブジェクトは更新されません

分類Dev

setStateはネストされたオブジェクトを更新しません

分類Dev

オブジェクト値が正しく更新されていません

分類Dev

レルムオブジェクトが更新されていません

分類Dev

Python:クラスオブジェクトはインスタンス化されていますが、定義されていませんか?

分類Dev

オブジェクトがヒットしましたが、スコアが更新されていません

分類Dev

ネストされたオブジェクトは、Spring JpaRepositoryによって保存されていません

分類Dev

RealmSwiftObjectはレルムによって管理されていません。返されたクラスでオブジェクトをフェッチします

分類Dev

オブジェクトクラスのArrayListは初期化されません

分類Dev

es6エクスポートされたオブジェクト値は更新されていませんか?

分類Dev

匿名クラスインスタンスで使用される参照されていないオブジェクトは期限切れになりませんか?

分類Dev

匿名クラスインスタンスで使用される参照されていないオブジェクトは期限切れになりませんか?

分類Dev

ネストされたjsonオブジェクトは、Json.NETを使用して更新/継承しません

分類Dev

Unityコンストラクターオブジェクトが正しく設定されていません

分類Dev

SOAPWCFラップされたオブジェクト参照がオブジェクトのインスタンスに設定されていません

分類Dev

オブジェクトが初期化されていません

分類Dev

「オブジェクトが設定されていません」エラー

分類Dev

React Uncaught ReferenceError-オブジェクト/クラスが定義されていません

分類Dev

同じクラスで宣言されているのにオブジェクトが見つかりません

分類Dev

クラスとオブジェクトが認識されていませんC ++

分類Dev

エラー:オブジェクト参照がオブジェクトのインスタンスに設定されていません。/接続が閉じられていません。接続の現在の状態は開いています

Related 関連記事

  1. 1

    クラスオブジェクトは印刷されません

  2. 2

    Javaグラフィックスオブジェクトが更新されていませんか?

  3. 3

    演算子「[]」は、クラス「オブジェクト」に対して定義されていません。ダート

  4. 4

    Angularサービスの公開オブジェクトリテラルが更新されていませんか?

  5. 5

    C ++エラー:抽象クラスタイプのオブジェクトは許可されていません

  6. 6

    オブジェクト<name>は宣言されていません

  7. 7

    管理されていないオブジェクトを更新できません

  8. 8

    エラー:「オブジェクト」はこのスコープで宣言されていません(C ++)

  9. 9

    孫オブジェクトは更新されません

  10. 10

    setStateはネストされたオブジェクトを更新しません

  11. 11

    オブジェクト値が正しく更新されていません

  12. 12

    レルムオブジェクトが更新されていません

  13. 13

    Python:クラスオブジェクトはインスタンス化されていますが、定義されていませんか?

  14. 14

    オブジェクトがヒットしましたが、スコアが更新されていません

  15. 15

    ネストされたオブジェクトは、Spring JpaRepositoryによって保存されていません

  16. 16

    RealmSwiftObjectはレルムによって管理されていません。返されたクラスでオブジェクトをフェッチします

  17. 17

    オブジェクトクラスのArrayListは初期化されません

  18. 18

    es6エクスポートされたオブジェクト値は更新されていませんか?

  19. 19

    匿名クラスインスタンスで使用される参照されていないオブジェクトは期限切れになりませんか?

  20. 20

    匿名クラスインスタンスで使用される参照されていないオブジェクトは期限切れになりませんか?

  21. 21

    ネストされたjsonオブジェクトは、Json.NETを使用して更新/継承しません

  22. 22

    Unityコンストラクターオブジェクトが正しく設定されていません

  23. 23

    SOAPWCFラップされたオブジェクト参照がオブジェクトのインスタンスに設定されていません

  24. 24

    オブジェクトが初期化されていません

  25. 25

    「オブジェクトが設定されていません」エラー

  26. 26

    React Uncaught ReferenceError-オブジェクト/クラスが定義されていません

  27. 27

    同じクラスで宣言されているのにオブジェクトが見つかりません

  28. 28

    クラスとオブジェクトが認識されていませんC ++

  29. 29

    エラー:オブジェクト参照がオブジェクトのインスタンスに設定されていません。/接続が閉じられていません。接続の現在の状態は開いています

ホットタグ

アーカイブ