gpt4 book ai didi

matlab - 使用 cellfun 检查工作区中是否存在变量

转载 作者:太空宇宙 更新时间:2023-11-03 19:20:27 25 4
gpt4 key购买 nike

考虑以下示例:

dat1 = 1;
dat2 = 2;

Variables = {'dat1','dat2'};

a = cellfun(@(x)exist(x,'var'),Variables);

for i = 1:length(Variables);
a2(i) = exist(Variables{i},'var');
end

为什么“a”和“a2”返回不同的值,即为什么使用 cellfun 不声明变量存在于工作区中?我错过了什么?

最佳答案

好的,我想我明白这里发生了什么:

当您调用匿名函数时,它会像任何普通函数一样创建自己的工作区。但是,这个新工作区将无法访问调用者工作区。

因此

funH = @(x)exist(x,'var')

只有在您提供 'x' 作为输入(funH('x'))时才会返回 1,因为它的整个工作空间由变量 组成'x'.

因此,

funH = @(x)exist('x','var') 

将始终返回 1,无论您提供什么作为输入。

有两种可能的解决方法:

(1) 在调用者的工作区使用evalin进行求值

 funH =  @(x)evalin('caller',sprintf('exist(''%s'',''var'')',x))

(2) 使用whos 的输出,并检查现有变量列表

 Variables = {'dat1','dat2'};
allVariables = whos;
a3 = ismember(Variables,{allVariables.name})

关于matlab - 使用 cellfun 检查工作区中是否存在变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14762112/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com