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 之前推出