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 回答