我需要建立类对象的数组ID
使用arrayfun:
% ID.m
classdef ID < handle
properties
id
end
methods
function obj = ID(id)
obj.id = id;
end
end
end
但得到一个错误:
>> ids = 1:5;
>> s = arrayfun(@(id) ID(id), ids)
??? Error using ==> arrayfun
ID output type is not currently implemented.
我可以在一个循环或者构建它:
s = [];
for k = 1 : length(ids)
s = cat(1, s, ID(ids(k)));
end
但什么是错的这种用法arrayfun的?
编辑(澄清的问题):问题不在于如何解决该问题(有几种解决方案),但为什么简单的语法, s = arrayfun(@(id) ID(id), ids);
不工作。 谢谢。
你问arrayfun
做一些它不是内置的事情。
从输出arrayfun
必须是 :
标量值(数字,逻辑,字符或结构)或细胞阵列。
对象不计入任何标量类型的,这就是为什么“变通办法”都涉及使用电池阵列的输出。 有一点要尝试使用cell2mat
的输出转换成你想要的格式; 它可以在同一行中完成。 (我没有,虽然进行了测试。)
s = cell2mat(arrayfun(@(id) ID(id), ids,'UniformOutput',false));
也许最简单的方法是使用cellfun,或迫使arrayfun通过设置返回单元阵列'UniformOutput'
选项。 然后可以将此单元阵列转换成obects的阵列(与使用上述猫)。
s = arrayfun(@(x) ID(x), ids, 'UniformOutput', false);
s = [s{:}];
这是我会怎样创建一个对象数组 :
s = ID.empty(0,5);
for i=5:-1:1
s(i) = ID(i);
end
它始终是一个好主意,提供一个“默认构造函数”不带任何参数,或至少使用默认值:
classdef ID < handle
properties
id
end
methods
function obj = ID(id)
if nargin<1, id = 0; end
obj.id = id;
end
end
end