Matlab中类的成员变量取值函数subsref详解
-- by benbenknight
在Matlab中定义一个类,成员变量取值函数subsref必不可少,样本代码可参照前面博文《Matlab中如何编写一个类?》。
假设subsref的定义如下所示:
b
= subsref(a,index)
其中输入参数index是一个重要的变量,对于类中不同的成员变量,必须根据index的不同取值进行访问。
index是一个结构体,有type和subs两个数据成员,下面详细介绍index的取值情况。
(1)概括
subsref用于三种情况:矩阵(matrix)、元胞(cell)和结构体(struct)。如
A(I)
A{I}
A.field
对应上面三种情况,index.type的取值分别为'()'、'{}'、'.'。
(2)读取整个成员变量
这种方式最为简单,如对于A.field,index长度为1,有:
index.type='.'
index.subs
= 'field'。
对应switch分支中的取值语句写做
b =
A.field
(3)读取矩阵成员的一个元素
如A.matrix(3,4),index长度为2,有:
index(1).type='.' index(2).type='()'
index(1).subs='matrix'
index(2).subs={3,4}
对应switch分支中的取值语句写做
b =
A.matrix(index(2).subs{:})
(4)读取元胞成员的一个元素
如A.cell{3,4},index长度为2,有:
index(1).type='.' index(2).type='{}'
index(1).subs='cell'
index(2).subs={3,4}
对应switch分支中的取值语句写做
b =
A.cell{index(2).subs{:}}
(5)访问数据成员的成员变量
按照上面4条规则类推。
如对象A中有一个成员B是结构体,访问A.B.matrix(3,4),index长度为3,有
index(1).type='.' index(2).type='.' index(3).type='()'
index(1).subs='B'
index(2).subs='matrix'
index(3).subs={3,4}
对应switch分支中的取值语句写做
b =
A.B.matrix(index(3).subs{:})
若B是一个类的对象,对应switch分支中的语句写起来有点小技巧,根据index(1)判断出访问B,便可直接调用B的subsref函数,参照前面博文《Matlab中如何在一个类中使用另一个类作为成员变量?》。
(6)访问对象数组中某个对象的成员变量
如A(2).field,index长度为2,有:
index(1).type='()' index(2).type='.'
index(1).subs={2}
index(2).subs='field'
对应switch分支中的取值语句写做
b =
A(index(1).subs{:}).field
(7)访问对象元胞中某个对象的成员变量
如A{2}.field,index长度为2,有:
index(1).type='{}' index(2).type='.'
index(1).subs={2}
index(2).subs='field'
对应switch分支中的取值语句写做
b =
A{index(1).subs{:}}.field
(8)其他情况按照上述7条规则类推
希望对大家能有所帮助。
加载中,请稍候......