文档

numArgumentsFromSubscript

自定义索引方法的参数数量

描述

例子

n= numArgumentsFromSubscript (obj年代indexingContext返回期望的输入数量subsasgn或者期望的输出数量subsref

过载numArgumentsFromSubscript描述从返回或赋值给逗号分隔列表的索引表达式返回的值的数量。也就是说,索引表达式以“{}”“。”索引。的numArgumentsFromSubscript函数可以:

  • 访问索引表达式中使用的索引操作和索引。

  • 确定索引操作是在引用语句、传递给函数的表达式或赋值的上下文中进行的。

如果类重载numArgumentsFromSubscript, MATLAB®当元素数大于1时,调用它来确定索引操作中涉及的数组元素数。例如,这些“。”索引操作生成调用numArgumentsFromSubscript

  • objArray.a-语句中引用的元素个数(声明

  • func (objArray.a)-表达式中返回的元素数量(表达式

  • [objArray。) = rhs-以逗号分隔的列表分配的值的数量(赋值

MATLAB使用调用上下文来确定何时应用返回的值numArgumentsFromSubscript.你的实现numArgumentsFromSubscript可以为三种类型的索引语句提供不同的输出。例如,这个超载numArgumentsFromSubscript

  • 的输出参数的预期数量subsref用于为传递给函数的表达式建立索引。

  • 使用索引子结构年代确定索引操作所需的参数数量

函数n = numArgumentsFromSubscript (obj,年代,indexingContext)如果indexingContext == matlab.mixin.util.IndexingContext.Expression n = 1;其他的n =长度(s (1) .subs {:});结束结束

实现subsref方法varargout输出,使MATLAB能够使用指定数量的输出参数调用此方法。

函数varargout = subsref (obj,年代)...结束

例子

全部折叠

使用单词作为对象属性的索引。

默认情况下,MATLAB将字符数组中的每个字符视为一个单独的元素。因此,MATLAB将字符数组的索引解释为多个索引值。

没有重载numArgumentsFromSubscript,关键字索引语句请求太多参数subsrefsubsasgn方法。要实现使用字符数组作为单个关键字的索引,定义numArgumentsFromSubscript方法返回1引用或赋值的元素数量。

过载numArgumentsFromSubscript支持以金宝app下类型的索引引用和赋值。

字符数组的索引引用:

obj {关键字

函数参数中的索引引用:

func (obj {关键字})

将逗号分隔的列表赋给对象数组:

(obj {关键字}] =右值

在这些情况下,subsrefsubsasgn无法从调用上下文确定所需的输出参数和输入参数的数量。使用numArgumentsFromSubscript函数。

定义KeyIndex使用两个属性初始化。KeyCell存储键名称。DataArray存储相应数据。自定义索引:

  • 实现一个subsref方法,返回与指定关键字对应的数据值。

  • 实现一个subsasgn方法,将指定的值赋给中对应的元素DataArray属性。

  • 过载numArgumentsFromSubscript返回值1或标量对象和值元素个数(objArray)对象数组。

对象的月份名称指定单元格数组KeyCell财产。属性中对应月份的降雪量的数字数组DataArray财产。

snow15 = KeyIndex ({“1月”2月的“3”}, [36 42 2])
snow15 = KeyIndex with properties: KeyCell: {'Jan' ' 'Feb' 'March'} DataArray: [36 42 2]

使用关键字引用特定月份的降雪量:

snow15 {2月的
ans = 42

使用“{}”用关键字索引:

snow15 {2月的} = 52个;

键对应的值2月的变化:

snow15 {2月的
ans = 52

创建一个2年的降雪数组:

snow14 = KeyIndex ({“1月”2月的“3”}, (12 8 2));sTotal = [snow14, snow15];

显示2月份两年来的降雪情况:

sTotal {2月的
Ans = 8 Ans = 52

更新两年来2月份的降雪量。索引单元格数组将返回一个逗号分隔的列表:

c {1} = 34;c {2} = 56;[sTotal {2月的{}] = c:};

这是KeyIndex类。这个类展示了一种特殊的编程技术。它不包括错误检查和类需要的其他特性。

classdefKeyIndex属性KeyCell DataArray结束方法函数obj = KeyIndex(键,数据)如果Nargin > 0 obj。KeyCell =关键;obj。DataArray =数据;结束结束函数n = numargumentsfrom下标(obj,~,~) n = nummel (obj);结束函数Varargout = subsref(obj,s)开关(1) .type情况下“{}”varargout =细胞(1);j = 1:k = 1:元素个数(obj (j) .KeyCell)如果strcmp(s.s subs(:),obj(j).KeyCell{k}) varargout{j} = obj(j).DataArray(k);结束结束结束情况下“。”varargout ={内装式(“subsref”obj s)};情况下“()”varargout ={内装式(“subsref”obj s)};结束结束函数Obj = subsgn (Obj,s,varargin) a = numel(varargin);开关(1) .type情况下“{}”j = 1:k = 1:元素个数(obj (j) .KeyCell)如果比较字符串(s.subs (:), obj (j) .KeyCell {k}) obj (j) .DataArray (k) =变长度输入宗量{};结束结束结束情况下“。”obj =内装式(“subsasgn”obj,年代变长度输入宗量{:});情况下“()”obj =内装式(“subsasgn”obj,年代变长度输入宗量{:});结束结束结束结束

定义一个支持属性的每个元素和每个数组索引金宝app的类。

numArgumentsFromSubscript函数使类能够自定义对特定属性的引用。索引子结构参数(年代)numArgumentsFromSubscript包含点索引表达式中引用的属性的名称(即表单的引用)obj。PropertyName).使用索引子结构,numArgumentsFromSubscript可以为任何给定属性返回唯一值。

PerArray类使用索引子结构中的信息来指定每个属性引用的输出数量。

过载numArgumentsFromSubscript返回:

  • 的值的逗号分隔列表ByElement属性,每个数组元素一个值

  • 的单个值ByArray属性用于整个数组

创建一个数组PerArray对象:

k = 1:4 pa(k) = PerArray(rand(k));结束

查询ByElement属性返回以逗号分隔的属性值列表:

pa。ByElement
Ans = 0.9293 0.6160 0.5853 0.7572 0.3500 0.4733 0.5497 0.7537 0.1966 0.3517 0.9172 0.3804 0.2511 0.8308 0.2858 0.5678

查询ByArray属性返回数组的单个值:

pa。ByArray
ans = 3.1416

这是PerArray类。这个类展示了一种特殊的编程技术。它不包括错误检查和类需要的其他特性。

classdefPerArray属性ByElement结束属性(常量)ByArray = pi;结束方法函数obj = PerArray(是)如果Nargin > 0 obj。ByElement =;结束结束函数n = numargumentsfrom下标(obj,s,indexingContext)导入matlab.mixin.util.IndexingContext如果(indexingContext ~ = IndexingContext.Assignment)如果长度(s) < 2开关(s.subs (:))情况下“ByElement”n =元素个数(obj);情况下“ByArray”如果比较字符串(s (1) .type,“。”n = 1;结束结束elseif> 1 n = Length ([s(1).subs{:}]);结束结束结束函数varargout = subsref (obj,年代)开关(1) .type情况下“。”varargout =细胞(1,元素个数(obj));k = 1:元素个数(obj) varargout {k} = obj (k)。(s.subs (:));结束情况下“()”如果长度([s(1).subs{:}]) > 1 ind = [s(1).subs{:}]numInd =长度(印第安纳州);varargout =细胞(1、numInd);k = 1: numInd varargout {k} = obj(印第安纳州(k)。(s (2) .subs (:));结束其他的varargout ={内装式(“subsref”obj s)};结束结束结束结束结束

输入参数

全部折叠

在索引操作中使用的重载类的。由该对象的类决定subsrefsubsasgn作为索引操作结果的MATLAB调用的方法。

包含有关特定索引表达式的信息的索引结构或索引结构数组。每个结构都有两个字段:

  • 类型—索引表达式可以为“()”“{}”“。”

  • 潜艇-下标值(属性名或索引号的单元格数组)

数据类型:结构体

结果应用的上下文,指定为这些枚举之一:

  • matlab.mixin.util.IndexingContext.Statement-索引引用用作语句(obj.a

  • matlab.mixin.util.IndexingContext.Expression-索引引用用作函数的参数(func (obj.a)

  • matlab.mixin.util.IndexingContext.Assignment-索引赋值((obj。一个= x).

输出参数

全部折叠

重载返回的参数数subsref或传递给重载subsasgn.过载numArgumentsFromSubscript为各种索引场景返回类所需的值。

提示

  • 过载numArgumentsFromSubscript而不是元素个数控制的结果从超负荷subsrefsubsasgn.重载numArgumentsFromSubscript能否避免重载引起的错误元素个数

介绍了R2015b