假设你有一个值类(并且你希望它是一个值类而不是一个句柄类)问题是:如何在这个值类中实现一个set属性,以便在设置新值时做一些工作?
假设我们有以下代码
classdef value_class
properties
x=0
end
methods
function obj=set_x(obj,v)
%do the stuff
if v>5
obj.x=v;
end
end
end
end
如果您测试此课程,将会看到以下内容:
>a=value_class;
>a.x=2;
>a
a =
value_class with properties:
x: 2
这是正确的(但我们的标准x> 5未检查)然后
>a.set_x(3);
> a
a =
value_class with properties:
x: 2
这显然对" a"!没有影响。在这种情况下,matlab会发送一份" a"功能set_x()因此实际" a"不会改变。
所以,如果您在为值类的属性赋值之前编写自己的set函数来执行某些操作,那么您就不能使用该函数来更改其调用者对象的值!
那么为值类实现set函数的真正方法是什么?
答案 0 :(得分:0)
Matlab有一个默认的set方法,我们可以将它用作我们的值(或非值)类的set函数
classdef value_class
properties
x=0
end
methods
function obj=set.x(obj,v)
%do the stuff
if v>5
obj.x=v;
end
end
end
end
然后如果我们测试这个类:
> a=value_class
a =
value_class with properties:
x: 0
> a.x=2
a =
value_class with properties:
x: 0
> a.x=6
a =
value_class with properties:
x: 6
在这种情况下,当您尝试将新值设置为a时,其set函数将运行并检查我们的条件中的值。 (to overloading other operators)