使用cellfun和save函数导出特定变量失败

时间:2016-06-03 08:50:39

标签: matlab

我有一个奇怪的错误。以下是我的问题的最小,完整和可验证的示例:

if (page.ios) {
    frameModule.topmost().ios.navBarVisibility = "always";

    page.ios.title = "Test Application";

    var controller = frameModule.topmost().ios.controller;

    var navBar = controller.navigationBar;
    navBar.barTintColor = UIColor.redColor();
    navBar.navigationBarHidden = false;
    navBar.barStyle = UIBarStyle.UIBarStyleBlackTranslucent;
}

首先,我声明以字母ba = 1; bb = 2; bc = 3; whos % Get variable names varnames = who('b*') % Definition of the filename filename = 'bVariables'; cellfun(@(x) display( x ), varnames); cellfun(@(x) save( filename, x, '-append' ), varnames); 开头的变量。然后我使用b命令获取以字母who开头的变量名称(假设在运行脚本之前我不知道它们)。名称作为字符串的单元格数组(char矢量)返回。

然后我尝试将每个变量单独保存到给定的文件名,并将b定义为save使用的匿名函数。

以下是我从上述MCV获得的输出:

cellfun

这很奇怪,因为变量确实存在于工作空间中。

  • 我使用varnames = 'ba' 'bb' 'bc' x = ba x = bb x = bc Error using save Variable 'ba' not found. Error in @(x)save(filename,x,'-append') 错了吗?

  • 是否可能与使用匿名函数和变量的可见性有关?

1 个答案:

答案 0 :(得分:3)

似乎是因为匿名函数和变量的范围。我可以使用eval函数重现错误:

ba = 1;
bb = 2;
bc = 3;
whos
% Get variable names
varnames = who('b*')
cellfun(@(x) eval( x ), varnames);

但是你可以这样做:

save(filename,varnames{:})

这将输出单元格的内容作为由保存功能处理的逗号分隔列表。您还可以在末尾添加'-append'以使其附加到该文件:save(filename,varnames{:},'-append')