这个问题是我在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 ,我们看到:
See how MATLAB calls subsref for the expression:
A{1:2} The syntax A{1:2} calls B = subsref(A,S) where S.type='{}' and S.subs={[1 2]}.
这似乎不是真的,因为 subsref 的返回值只是第一个参数,而不是所有参数。
如果有人这样做:
>> [a,b]=subsref(myCell,struct('type','{}','subs',{{[1 2]}} ) )
a =
2
b =
4 % Surprise!
但这与自动返回的 myCell{[2 4]} 不同:
>> myCell{[1 2]}
ans =
2
ans =
4
我需要为每个使用访问 myCell
的索引使用 subsref 和一个输出,还是我遗漏了什么?
最佳答案
当大括号 ({}
) 用于索引 cell array 时, 输出是 comma-separated list .这隐式调用了 subsref
但行为与直接调用它略有不同。
subsref
本身是一个技术上的函数,由花括号返回的逗号分隔列表的行为类似于 varargout
。在这种情况下。这意味着您应该为所有所需的输出结果指定一个适当的“接收器”,就像您对任何其他返回多个参数的函数所做的那样,否则它们将被忽略。
关于matlab - 带单元格的 Subsref,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18384735/