2017-09-05 72 views
1

我想写一个简单的实现在MATLAB堆栈的元素,我已经使用了一段代码早些时候在我的工作类似于:MATLAB无法变量赋值给一个矩阵

A = zeros(5,3) 
[x, y] = size(A) 

此,如预期受让人x到5,和y 3,根据需要,但是我试图做类似的事情在我的栈的实现,它的throughing错误:

function [x, y] = pop(obj) 
     [x, y] = obj.Data(1, :); 
     obj.Data(1, :) = []; 
    end 

错误:索引不能产生多个结果。

我想先提取2×1矩阵,然后分配给它,但没有工作,要么:

function [x, y] = pop(obj) 
     top = obj.Data(1, :); 
     [x, y] = top; 
     obj.Data(1, :) = []; 
    end 

错误:有太多的输出参数

这似乎很奇怪,我和解释为什么发生这种情况会非常有趣,以及为此寻求解决方法

谢谢。

+0

什么'obj'是什么?什么是顶部出来?如果,如你所说,top是一个2×1矩阵,你必须用'x = top(1,1)'和'y = top(2,1)'提取这些值。 – marcoresk

+0

'obj'是一个2xn矩阵。 –

回答

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);