【问题标题】:Using function "Who" within a function in MATLAB在 MATLAB 的函数中使用函数“Who”
【发布时间】:2014-05-21 17:34:01
【问题描述】:

我正在使用 Matlab R2013a,并尝试在函数中使用“谁”函数来检索以名称开头的变量列表。

假设我的工作区中有一个变量列表,如下所示:

  • a = 1
  • a_2 = 2
  • a_3 = 3

当我运行这个时:

who('a*');

效果很好。

但是当我在这样的函数中运行相同的东西时:

function someFunction()

   who('a*');

end

function someFunction()

   disp(who('a*'));

end

它没有。没有错误,只是没有输出。

如果我将这些变量保存在一个名为

的 Matlab 文件中

myVariables.mat

并像这样在同一个函数中运行它:

function someFunction()

   who('a*','myVariables');

end

还是不行。

我可以理解为什么第一个可能由于范围而不起作用,但是指定运行“谁”功能的文件应该可以工作......我错过了什么?

任何帮助将不胜感激。


问候

迪亚

【问题讨论】:

  • 是的,它已经加载了。我的意思是我可以在调用 who 函数之前强制加载函数。
  • 如果您以前没有阅读过doc who,我建议您至少彻底阅读一次。我可以在那里看到解决方案。
  • @Divakar 强制在函数接缝中加载 MATLAB 文件,谢谢。但是您会认为使用 location 参数就足够了。再次感谢,非常感谢。
  • @Divakar 我现在知道我做错了什么,这个:disp(who('brain10*','Results_v2')); 应该是这样的:disp(who('brain10*','-file','Results_v2'));。它现在工作正常,谢谢。你每天/晚上都能学到新东西。
  • 太棒了!但是函数使用封装是有原因的,因此必须避免在函数内部加载文件。丹尼尔的建议在这方面是有道理的。

标签: matlab


【解决方案1】:

作为mentioned by @Daniel,函数的工作区与基础工作区是分开的。有两种方法可以在 m 文件中使用 who 来检查基础工作区:

  1. 使用script 代替函数(即省略function- 行;按文件名启动脚本,就像使用函数一样):脚本共享基本工作区,因此, who 将能够看到您的所有变量。

  2. 使用evalin:evalin('base','who')

【讨论】:

    【解决方案2】:

    您正在尝试访问函数中的变量。只有输入参数和全局变量在函数中可见。您必须执行以下操作:

    function someFunction(a1,a2)
    
       who('a*');
    
    end
    

    如果您真的想使用动态变量名称,我强烈建议您更改设计。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多