Main Content

本页翻译不是最新的。点击此处可查看最新英文版本。

subsasgn

重新定义下标赋值

语法

A = subsasgn(A,S,B)

说明

对于在 R2021b 及更高版本中创建的类,建议的自定义索引方式是从 matlab.mixin.indexing.RedefinesParenmatlab.mixin.indexing.RedefinesDotmatlab.mixin.indexing.RedefinesBrace 的某种组合中继承。有关详细信息,请参阅自定义对象索引

A 是对象时,MATLAB® 为语法 A(i) = BA{i} = BA.i = B 调用 A = subsasgn(A,S,B)

MATLAB 使用内置 subsasgn 函数解释索引赋值语句。通过重载类中的 subsasgn 来修改类的索引赋值行为。

注意

您调用 subsasgn 时必须包含一个输出参数。subsasgn 不会修改在索引操作中使用的对象(即第一个输入参数)。您必须为输出赋值,才能得到修改后的对象。

输入参数

A

索引操作中使用的对象

S

结构体包含两个字段:typesubs。对于复合索引表达式,S 是结构体数组,每一项对应一个索引级别。

  • type 是包含 (){}.char 向量或字符串,指示使用的索引类型。

  • subs 是元胞数组、字符数组或包含实际下标的字符串数组。

B

所赋的值(赋值语句的右侧)

输出参数

A

赋值语句的结果,它是对第一个传入参数(对象)修改后所得到的结果。

如果 subsasgn 方法的实现赋予了多个值,请对第三个输入参数使用 varargin

示例

以下所示表达式的 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,...) 中,下标 JKMN 等可以是标量、向量或数组,前提是满足以下所有条件:

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