为什么Matlab的cellfun功能不尊重导入?如何将import语句传播到匿名函数?

时间:2016-12-26 09:49:07

标签: matlab oop import cell-array

我想测试某个类的对象的单元格数组。 我在包中组织我的文件并使用cellfun(@(o) isa(o,'MyClassName'),myCellArray)语句来缩短我的代码。

问题:false似乎忽略了导入声明,为调用isa(myCellArray{i}, 'MyClassName')产生true的单元数组元素返回cellfun

如何import尊重我的cellfun声明?

编辑:导入语句可能不会传播到myfun.m +pkg/ +pkg/MyClass.m 内的匿名函数吗?如果是的话,我怎么能达到这个目的呢?

最小(非)工作示例

文件:

% cat <<"%EOF" > myfun.m # paste into shell if on UNIX
function myfun()
    import pkg.MyClass;
    o{1} = MyClass();

    x = cellfun(@(d) isa(d,'MyClass'),o);
    fprintf('cellfun: %d\n',x);

    b = isa(o{1},'MyClass');
    fprintf('direct: %d\n',b);

    fprintf('classes of o: \n');
    cellfun(@class, o,'UniformOutput',false)
end
%EOF 

myfun.m:

% mkdir "+pkg"; cat <<"%EOF" >"+pkg/MyClass.m" # paste to shell if on UNIX
classdef MyClass
end
%EOF

+ pkg / MyClass.m:

>> myfun
cellfun: 0
direct: 1
classes of o: 
ans = 
    'pkg.MyClass'

我的输出是:

MyClass.m

如果我将myfun.m移至与import ...相同的目录,并移除myfun.m中的>> myfun cellfun: 1 direct: 1 classes of o: ans = 'MyClass' >> 行:

{{1}}

0 个答案:

没有答案