对象可以用括号或大括号进行索引,如obj(idx)
或类似obj{idx}
,甚至类似obj(idx).field
然而,这取决于程序员来决定这个索引的实际含义。在多项式类的情况下</p>(n)
可能意味着的系数n-多项式的次幂,或者它可能是多项式的求值n。此下标引用的含义从subsref
方法
newval =
subsref (val, idx)
¶对执行下标元素选择操作val根据指定的下标idx.
下标idx必须是具有字段的结构体数组类型和潜艇’. 的有效值类型是()
,{}
和.
这个潜艇字段可以是:
或者索引值的元胞数组。
以下示例显示如何提取矩阵的前两列
val=魔术(3)⇒ val=[8 1 6 3 5 7 4 9 2]idx.type=“()”;idx.subs={“:”,1:2};subsref(val,idx)⇒ [ 8 1 3 5 4 9 ]
请注意,这与书写相同val(:,1:2)
.
如果idx是一个带有字段的空结构体数组类型和潜艇returnval.
关键字终止
不能在中使用subsref
用于索引赋值。
例如,此类使用的约定是()
多项式求值并使用进行索引{}
返回n-th系数(的n-th次幂)。的代码subsref
方法看起来像
函数r=subsref(p,s)if(isempty(s))error(“@多项式/subsref:缺少索引”);endif开关(s(1).type)case“()”idx=s(1个).subs;if(numel(idx)!=1) error(“@多项式/subsref:只需要一个索引”);endif r=聚乙烯(fliplr(p.poly),idx{1});case“{}”idx=s(1).subs;if(numel(idx)!=1) error(“@多项式/subsref:只需要一个索引”);endif if(isnumeric(idx{1}))r=p.poly(idx{1}+1);否则r=p.poly(idx{1});endif case“.”fld=s.subs;if(!strcmp(fld,“poly”))error('@多项式/subsref:无效属性“%s”',fld);endif r=p.poly;否则错误(“@多项式/subsref:无效的下标类型”);endswitch if(numel(s)>1)r=subsref(r,s(2:end));endifend函数
下标赋值的等效函数使用subs
方法
newval =
subsasgn (val, idx, rhs)
¶根据指定的下标执行下标赋值操作idx.
下标idx必须是具有字段的结构体数组类型和潜艇’. 的有效值类型是()
,{}
和.
这个潜艇字段可以是:
或者索引值的元胞数组。
以下示例显示如何将3乘3矩阵的前两列设置为零。
val=魔术(3);idx.type=“()”;idx.subs={“:”,1:2};val=subsasgn(val,idx,0)⇒ [ 0 0 6 0 0 7 0 0 2 ]
请注意,这与书写相同val(:,1:2)=0
.
如果idx是一个带有字段的空结构体数组类型和潜艇returnrhs.
关键字终止
不能在中使用subs
用于索引赋值。
详见: subsref, 子结构体, 优化subsasgn_calls.
val =
optimize_subsasgn_calls ()
¶old_val =
optimize_subsasgn_calls (new_val)
¶old_val =
optimize_subsasgn_calls (new_val, "local")
¶查询或设置的内部标志subs
方法胼胝化。
如果为true,Octave将在调用时尝试消除冗余复制subs
方法。
当从具有的函数内部调用时地方的
参数,则该变量会为函数及其调用的任何子程序在本地进行更改。退出函数时将恢复原始变量值。
详见: 潜艇.
请注意subsref
和subs
方法总是接收整个索引链,而它们通常只处理第一个元素。这些方法负责处理链的其余部分(如果需要),通常通过将其再次转发到subsref
或subs
.
如果您希望使用终止
关键字在另一个对象的下标表达式中,则必须有终止
方法定义。例如终止
多项式类的方法可能看起来像
函数r=end(obj,index_pos,num_indices)if(num_indics!=1)error(“多项式对象只能有一个索引”);endif r=长度(obj.poly)-1;结束函数
这是一个相当通用的终止
具有类似于的行为的方法终止
Octave Array类的关键字。使用多项式类的一个例子是
p=多项式([1,2,3,4]);p{端1}⇒ 3.
对象本身也可以用作下标表达式中的索引,这从子索引
作用
idx =
subsindex (obj)
¶将对象转换为索引向量。
什么时候obj是用类构造函数定义的类对象,则子索引
是重载方法,它允许将此类对象转换为有效的索引向量。需要注意的是子索引
必须返回类的从零开始的实整数向量double
。例如,如果类构造函数是
函数obj=myclass(a)obj=class(struct(“a”,a),“myclass”);结束函数
然后子索引
作用
函数idx=子索引(obj)idx=双(obj.a)-1.0;结束函数
可以如下使用
a=myclass(1:4);b=1:10;b(a)⇒ 1 2 3 4
最后,通过提供冒号
方法
版权所有 © 2024 Octave中文网
ICP备案/许可证号:黑ICP备2024030411号