这个问题出现在我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??

检查subsrefdocumentation,我们看到:
请参见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

我需要对每个使用accessmyCell的索引使用一个输出的subsref,或者我缺少什么?

最佳答案

当卷轴({})用于索引cell array时,输出为comma-separated list。这隐式调用subsref,但行为与直接调用略有不同。
subsref本身在技术上是一个a函数,花括号返回的逗号分隔列表在本例中的行为与varargout类似这意味着您应该为所有所需的输出结果指定一个适当的“sink”,就像处理任何其他返回多个参数的函数一样,否则它们将被忽略。

10-02 12:03