我想拼接一个参数列表以传递给一个函数。对于向量,我知道我可以使用num2cell
并使用大括号调用单元格(请参阅this question),但在我的情况下,我想要拼接的列表最初有struct
s和我需要访问其中一个属性。例如:
austen = struct('ids', ids, 'matrix', matrix);
% ... more structs defined here
authors = [austen, dickens, melville, twain];
% the function call I want to do is something like
tmp = num2cell(authors);
% myFunction defined using varargin
[a,b] = myFunction(tmp{:}.ids);
上面的示例不起作用,因为Matlab期望花括号中的一个输出并且它接收4,每个作者一个。我还尝试将我的参数列表首先定义为单元格数组
indexes = {austen.ids, dickens.ids, melville.ids, twain.ids};
[a,b] = myFunction(indexes{:});
但是问题是myFunction
正在采用向量ids
的并集和交集,我得到以下错误:
Error using vertcat
The following error occurred converting from double to struct:
Conversion to struct from double is not possible.
Error in union>unionR2012a (line 192)
c = unique([a;b],order);
Error in union (line 89)
[varargout{1:nlhs}] = unionR2012a(varargin{:});
这样做的正确方法是什么?问题是我将有数十位作者,而且我不想手动将它们传递给myFunction
。
答案 0 :(得分:0)
正如@kedarps正确地指出我需要使用struct2cell
而不是num2cell
。以下代码可以解决这个问题
tmp = struct2cell(authors);
[a, b] = myFunction(tmp{1,:,:}); %ids is the first entry of the structs
我之前从未听说过struct2cell!它甚至没有出现在help num2cell
的另见中!拥有apropos
函数like Julia's ....