3
刚刚在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
和家庭组。丈夫功能将p的家庭价值设置为f。为什么我的代码不工作?据我所知,我正在做评论中建议的内容。
编辑: 经过一番周折后,我确认“this”和“person”是正确类型的对象。最终的问题是Matlab传递的是价值而不是参考。除非有人知道解决办法,否则我会尽我所能回答自己。
使用setter方法,比如'setHusband(P)''中的类Family',里面,设置当前'Family'对象的'husband'属性以及设置输入'p'对象的'family'属性。 – Bee
我试过或多或少都是一样的东西,看代码。不幸的是,它不工作。上面的代码将设置家庭价值,但不会设置个人价值。任何想法可能是为什么? – csleys
我明白了。也许让'Person'和'Family'类'handle'对象解决了引用问题?只需将'添加到类的定义中即可:http://www.mathworks.com/help/matlab/matlab_oop/comparing-handle-and-value-classes.html –
Bee