matlab如何调用从另一个类方法更改prop的类方法

时间:2017-12-07 12:33:33

标签: matlab class methods

如果我调用方法(接收并返回obj),则会更改我的属性。

但是如果我从另一种方法调用该方法就失败了。我尝试了各种各样的方法,但仍然失败了。

 classdef AClass
  properties
    A;
  end
  methods 
    function obj = ChangeA(obj, v)
      obj.A = v;
    end
    function obj = CallChangeA(obj)
      obj.ChangeA(4);
      %obj = obj.ChangeA(4);
      %ChangeA(obj, 4);
      %obj = ChangeA(obj, 4);
      % none of these works
    end
  end
end

% ------ script: 
a1 = AClass;
a1.A = 1;
a1.ChangeA(2); % a1.A = 2

a2 = AClass;
a2.A = 3;
a2.CallChangeA(); % a2.A = 3 !!!  not four

如何编写代码,以便从1方法调用另一个方法更新属性?

1 个答案:

答案 0 :(得分:3)

除了上面提到的示例代码中的明显拼写错误之外,我强烈建议您查看difference between MATLAB's Handle and Value classes。默认情况下,MATLAB类是值类,因此每次将对象传递给函数时,都会创建一个独立的副本。如果您要对此对象进行更改,则需要将其作为输出返回:

classdef AClass
    properties
        A;
    end
    methods
        function obj = ChangeA(obj, a)
            obj.A = a;
        end

        function obj = CallChangeA(obj)
            obj = obj.ChangeA(4);
        end
    end
end

哪些功能如预期:

>> a1 = AClass;
>> a1.A = 1

a1 = 

  AClass with properties:

    A: 1

>> a1 = a1.CallChangeA()

a1 = 

  AClass with properties:

    A: 4

另一方面,句柄类是对单个底层对象的引用,允许(除其他外)对象的修改:

classdef AClass < handle
    properties
        A;
    end
    methods
        function ChangeA(obj, a)
            obj.A = a;
        end

        function CallChangeA(obj)
            obj.ChangeA(4);
        end
    end
end

其功能也符合预期:

>> a1 = AClass;
>> a1.A = 1;
>> a1.A

ans =

     1

>> a1.CallChangeA()
>> a1.A

ans =

     4