我需要ID使用arrayfun 构建一个类对象数组:
% ID.m
classdef ID < handle
properties
id
end
methods
function obj = ID(id)
obj.id = id;
end
end
end
Run Code Online (Sandbox Code Playgroud)
但得到一个错误:
>> ids = 1:5;
>> s = arrayfun(@(id) ID(id), ids)
??? Error using ==> arrayfun
ID output type is not currently implemented.
Run Code Online (Sandbox Code Playgroud)
我可以在循环中交替构建它:
s = [];
for k = 1 : length(ids)
s = cat(1, s, ID(ids(k)));
end
Run Code Online (Sandbox Code Playgroud)
但是这个arrayfun的使用有什么问题?
编辑(问题的澄清):问题不是如何解决问题(有几种解决方案),但为什么简单的语法s = arrayfun(@(id) ID(id), ids);不起作用.谢谢.
也许最简单的方法是使用cellfun,或者通过设置'UniformOutput'选项强制arrayfun返回单元格数组.然后你可以将这个单元格数组转换为一个obects数组(与上面的cat一样).
s = arrayfun(@(x) ID(x), ids, 'UniformOutput', false);
s = [s{:}];
Run Code Online (Sandbox Code Playgroud)