Matlab的arrayfun用于类对象的统一输出

Ser*_*erg 3 oop matlab class

我需要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);不起作用.谢谢.

rob*_*nce 5

也许最简单的方法是使用cellfun,或者通过设置'UniformOutput'选项强制arrayfun返回单元格数组.然后你可以将这个单元格数组转换为一个obects数组(与上面的cat一样).

s = arrayfun(@(x) ID(x), ids, 'UniformOutput', false);
s = [s{:}];
Run Code Online (Sandbox Code Playgroud)