numArgumentsFromSubscript
基于 subsref 和 subsasgn 的自定义索引的参数数目
说明
此函数支持实现 subsref
和 subsasgn
的类的自定义索引。对于在 R2021b 及更高版本中创建的类,建议的自定义索引过程是从 matlab.mixin.indexing.RedefinesParen
、matlab.mixin.indexing.RedefinesDot
和 matlab.mixin.indexing.RedefinesBrace
的某种组合中继承。计算此类型的索引的参数数目的等效函数是 listLength
。有关详细信息,请参阅自定义对象索引。
返回 n
= numArgumentsFromSubscript(obj
,s
,indexingContext
)subsasgn
的预期输入的数量,或 subsref
的预期输出的数量。
重载 numArgumentsFromSubscript
来描述要从索引表达式返回的值数量,此处的索引表达式是指会返回或赋值给逗号分隔列表的索引表达式。即,以 '{}'
或 '.'
索引结束的索引表达式。numArgumentsFromSubscript
函数可以:
访问索引表达式中使用的索引操作和索引。
确定索引操作的发生环境是在引用语句中、传递给函数的表达式中,还是在赋值过程中。
如果某个类重载 numArgumentsFromSubscript
,MATLAB® 会调用它来确定索引操作中涉及的数组元素的数量(前提是元素数量大于 1 时)。例如,下面这些 '.'
索引操作会引发对 numArgumentsFromSubscript
的调用:
objArray.a
- 语句中引用的元素数量 (Statement
)func(objArray.a)
- 表达式中返回的元素数量 (Expression
)[objArray.a] = rhs
- 用逗号分隔的列表赋值的值数量 (Assignment
)
MATLAB 使用调用上下文来确定何时应用 numArgumentsFromSubscript
返回的值。您实现的 numArgumentsFromSubscript
可以为三种类型的索引语句提供不同的输出。例如,下面这个 numArgumentsFromSubscript
的重载即可实现:
针对传递给函数的索引表达式,更改
subsref
的预期输出参数数量。使用索引子结构体
s
来确定索引操作所需的参数数量
function n = numArgumentsFromSubscript(obj,s,indexingContext) if indexingContext == matlab.mixin.util.IndexingContext.Expression n = 1; else n = length(s(1).subs{:}); end end
利用 varargout
输出实现 subsref
方法,以便 MATLAB 能够使用指定的输出参数数量调用此方法。
function varargout = subsref(obj,s) ... end
示例
输入参数
输出参数
提示
重载
numArgumentsFromSubscript
而不是numel
,以控制来自重载的subsref
和subsasgn
的结果。重载numArgumentsFromSubscript
可以避免重载numel
导致的错误。
版本历史记录
在 R2015b 中推出