我正在尝试在MATLAB中编写一个简单的堆栈实现,我在我的工作中使用了一段代码,类似于:
A = zeros(5,3)
[x, y] = size(A)
这正如所期望的那样,根据需要将x分配给5,将y分配给3,但是我已经尝试在我的堆栈实现中执行类似的操作并且它通过错误:
function [x, y] = pop(obj)
[x, y] = obj.Data(1, :);
obj.Data(1, :) = [];
end
错误:索引无法产生多个结果。
我试图首先提取2x1矩阵,然后分配它,但那也不起作用:
function [x, y] = pop(obj)
top = obj.Data(1, :);
[x, y] = top;
obj.Data(1, :) = [];
end
错误:输出参数太多
这对我来说似乎很奇怪,并解释为什么会发生这种情况会非常有趣,以及解决这个问题
谢谢。
答案 0 :(得分:2)
这是因为size
是一个可以返回多个输出的函数/操作,但是Data(1,:)
之类的索引操作只能将一个输出作为数组返回,并且数组不能被视为多个输出。您可以执行以下操作:
top = num2cell(obj.Data(1, :));
[x, y] = top{:}; %or [x, y] = top{1:2};
在这里,您将数组转换为单元格数组,并通过{:}
创建了一个逗号分隔列表,可以将其分配给多个变量。
或者可以单独指定
x = obj.Data(1, 1);
y = obj.Data(1, 2);