subsasgn
重新定义下标赋值
语法
A = subsasgn(A,S,B)
说明
对于在 R2021b 及更高版本中创建的类,建议的自定义索引方式是从 matlab.mixin.indexing.RedefinesParen
、matlab.mixin.indexing.RedefinesDot
和 matlab.mixin.indexing.RedefinesBrace
的某种组合中继承。有关详细信息,请参阅自定义对象索引。
当 A
是对象时,MATLAB® 为语法 A(i) = B
、A{i} = B
或 A.i = B
调用 A = subsasgn(A,S,B)
。
MATLAB 使用内置 subsasgn
函数解释索引赋值语句。通过重载类中的 subsasgn
来修改类的索引赋值行为。
注意
您调用 subsasgn
时必须包含一个输出参量。subsasgn
不会修改在索引操作中使用的对象(即第一个输入参量)。您必须为输出赋值,才能得到修改后的对象。
输入参数
|
索引操作中使用的对象 |
|
结构体包含两个字段:
|
|
所赋的值(赋值语句的右侧) |
输出参量
|
赋值语句的结果,它是对第一个传入参量(对象)修改后所得到的结果。 如果 |
示例
以下所示表达式的 subsasgn
的参量值:
A(1:2,:) = B;
语法 A(1:2,:) = B
调用 A = subsasgn(A,S,B)
,其中 S
是包含 S.type = '()'
和 S.subs = {1:2,':'}
的结构体。冒号字符 (':'
) 指示用作下标的冒号。
对于表达式:
A{1:2} = B;
语法 A{1:2} = B
调用 A = subsasgn(A,S,B)
,其中 S.type = '{}'
和 S.subs = {[1 2]}
。
对于表达式:
A.field = B;
语法 A.field = B
调用 A = subsasgn(A,S,B)
,其中 S.type = '.'
和 S.subs = 'field'
。
对于表达式:
A(1,2).name(3:5) = B;
简单调用为处理更复杂的索引表达式提供了一种简单的方式。在这种情况下,length(S)
是下标级数。例如,A(1,2).name(3:5) = B
调用 A = subsasgn(A,S,B)
,其中 S
是包含下列值的 3×1 结构体数组:
S(1).type = '()' | S(2).type = '.' | S(3).type = '()' |
S(1).subs = {1,2} | S(2).subs = 'name' | S(3).subs = {[3 4 5]} |
提示
在由类定义的 subsasgn
方法中,MATLAB 调用内置的 subsasgn
。通过调用内置项,您可以在定义专用索引时使用默认索引行为。
算法
在赋值 A(J,K,...) = B(M,N,...)
中,下标 J
、K
、M
、N
等可以是标量、向量或数组,前提是满足以下所有条件:
为
B
指定的下标数(不包括等于 1 的后续下标)不超过ndims(B)
返回的值。为
A
指定的非标量下标数等于为B
指定的非标量下标数。例如,A(5,1:4,1,2) = B(5:8)
是有效的,因为方程两端使用了一个非标量下标。为
A
指定的所有非标量下标的阶和长度与为B
指定的非标量下标的阶和长度匹配。例如,A(1:4,3,3:9) = B(5:8,1:7)
是有效的,因为方程的两端(忽略一个标量下标3
)使用了一个包含 4 个元素的下标,并后跟一个包含 7 个元素的下标。
扩展功能
版本历史记录
在 R2006a 之前推出