刚刚开始在 Matlab OO 编程中进行速成课程,我想为一个对象编写一个 set 方法,该方法将设置值,然后通过在另一个对象的相关字段中设置自身来进行交互。
classdef Person
properties
age;
sex;
priority; % net priority based on all adjustment values
adjustment; % personal adjustment value for each interest
family;
end
methods
function obj = set.sex(obj, value)
if value == 'm' || value == 'f'
obj.sex = value;
else
error('Sex must be m or f')
end
end
function obj = set.family(obj,value)
if class(value) == 'Family'
obj.family = value;
else
error('Family must be of type Family')
end
end
end
end
classdef Family
properties
husband;
wife;
children;
elders;
adjustment; % interest adjustment values
end
methods
function this = set.husband(this,person)
if class(person) == 'Person'
this.husband = person;
person.family = this;
else
error('Husband must be of type Person')
end
end
function this = set.wife(this,person)
if class(person) == 'Person'
this.wife = person;
person.family = this;
else
error('Wife must be of type Person')
end
end
end
end
所以我现在要做的是:
p = Person
f = Family
f.husband = p
p.family = f
我希望家人和个人能够自动相互定位:
p = Person
f = Family
f.husband = p
Family set.husband 函数会将 p 的家庭值设置为 f。为什么我的代码不起作用?据我所知,我正在按照评论中的建议进行操作。
编辑:
经过一番混乱之后,我确认“this”和“person”是正确类型的对象。最终的问题是 Matlab 按值传递而不是按引用传递。除非有人知道解决方法,否则我会尽可能回答自己。
通常考虑普通物体value
对象。当它们传递给函数或方法时,仅传递值,而不传递对原始对象的引用。 Matlab 可以使用只读引用机制来加快速度,但函数或方法不能更改原始对象的属性。
为了能够通过引用传递输入参数,您的自定义对象需要是handle
目的。只需在定义类时,继承自handle
这应该可以解决问题:
classdef Person < handle
and
classdef Family < handle
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)