这个问题出现在我answering this question的时候这应该是我犯的愚蠢错误,但我不知道是什么错误…
myMatrix = [22 33; 44 55]
退货
>> subsref(myMatrix, struct('type','()','subs',{{[1 2]}} ) );
ans =
22 44
与单元格一起使用时:
myCell = {2 3; 4 5}
退货
>> subsref(myCell,struct('type','{}','subs',{{[1 2]}} ) );
ans =
2 % WHATTT?? Shouldn't this be 2 and 4 Matlab??
检查
subsref
documentation,我们看到:请参见MATLAB如何为表达式调用subref:
A{1:2}语法A{1:2}调用B=subsref(A,S),其中S.type='{}'和
S.subs={[12]}。
这似乎不是真的,因为subsref返回的值只是第一个参数,而不是所有参数。
如果是这样的话:
>> [a,b]=subsref(myCell,struct('type','{}','subs',{{[1 2]}} ) )
a =
2
b =
4 % Surprise!
但这与自动返回的myCell{[24]}不同:
>> myCell{[1 2]}
ans =
2
ans =
4
我需要对每个使用access
myCell
的索引使用一个输出的subsref,或者我缺少什么? 最佳答案
当卷轴({}
)用于索引cell array时,输出为comma-separated list。这隐式调用subsref
,但行为与直接调用略有不同。subsref
本身在技术上是一个a函数,花括号返回的逗号分隔列表在本例中的行为与varargout
类似这意味着您应该为所有所需的输出结果指定一个适当的“sink”,就像处理任何其他返回多个参数的函数一样,否则它们将被忽略。