对象方法中的自引用

时间:2013-07-17 14:25:10

标签: matlab oop self-reference

刚开始在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

并且族set.husband函数将p的族值设置为f。为什么我的代码不起作用?据我所知,我正在做评论中建议的内容。

编辑: 经过一番乱搞,我已经确认“这个”和“人”是正确类型的对象。最终问题是Matlab通过值而不是参考通过。除非有人知道如何解决这个问题,否则我会尽力回答。

1 个答案:

答案 0 :(得分:4)

普通对象通常被视为value个对象。将它们传递给函数或方法时,只传递值而不传递对原始对象的引用。 Matlab可以使用只读引用机制来加快速度,但函数或方法不能改变原始对象的属性。

为了能够通过引用传递输入参数,您的自定义对象必须是handle对象。只需在定义类时,继承自handle,这应该可以解决问题:

classdef Person < handle

classdef Family < handle