以下MATLAB代码不起作用。我想它在函数转换器中有一些功能,MATLAB试图使对象A
和B
相等,而不仅仅是将值设置为相同。对此有何解决方法?
classdef foo
%FOO Summary of this class goes here
% Detailed explanation goes here
properties
A=5
B=0
end
methods
function changer(obj)
obj.B=obj.A
end
end
end
答案 0 :(得分:5)
我认为代码实际上工作正常,只是没有做到你期望的。
您定义它的方式,foo
是 value 类,因此它具有值语义,而不是引用(或句柄)语义。当您执行changer(myobj)
时,MATLAB正在创建一个myobj的副本,其中包含新值B并将其返回给您。原始myobj
保持不变。实现值类时,通常会向changer
添加输出参数,以便能够进一步使用此新副本。
function obj = changer(obj)
如果您将foo设置为句柄类,则继承自handle
:
classdef foo<handle
它将具有引用(或句柄)语义,其中原始myobj
被修改(您不再需要changer
的输出参数):
>> myobj = foo;
>> changer(myobj); % or alternatively myobj.changer
>> myobj.B
ans =
5