3

MATALB に次のクラスがあります。

classdef MyClass

  properties
      a;
  end

  methods
      function foo(obj)
          obj.a = 1;            
      end  
  end
end

今、私はこれをします。

mc = MyClass;
mc.foo();

今、これがあります。

mc.a == []

これは私が理解していないものです。私は期待していました

mc.a == [1]

関数 foo がオブジェクトの状態を変更しないのはなぜですか?

これが非常に基本的な質問である場合は申し訳ありません。私は Java や C# などの言語に慣れていますが、セマンティクスは明らかに期待どおりです。

次のようにすると、期待どおりに動作することがわかりました。

classdef MyClass < handle

しかし、MATLAB の値クラス (つまり、ハンドル クラスではない) で目的の動作を取得するにはどうすればよいでしょうか?

4

1 に答える 1

3

foo値クラスは参照ではなく値で渡されるため、更新されたオブジェクトを返す必要があります。

classdef MyClass

  properties
      a;
  end

  methods
      function obj = foo(obj)
          obj.a = 1;            
      end  
  end
end

それで

mc = MyClass;
mc = mc.foo();

これが、ハンドル クラスのみを使用する理由です。

于 2013-10-30T15:48:57.227 に答える