如果我调用方法(接收并返回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方法调用另一个方法更新属性?
答案 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