在matlab中实现值类(非句柄类)的set方法

时间:2015-06-05 02:40:32

标签: matlab

假设你有一个值类(并且你希望它是一个值类而不是一个句柄类)问题是:如何在这个值类中实现一个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函数的真正方法是什么?

1 个答案:

答案 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