Main Content

在编辑器中检查变量作用域

作用域问题可能是一些编码问题的来源。例如,如果您不知道嵌套函数共享特定变量,运行代码的结果可能和您预期的不同。同样,局部、全局和持久变量使用不当可能会导致意外结果。

代码分析器并不总会指出作用域问题,因为在函数间共享变量可能不是错误,而是您有意为之。使用 MATLAB® 函数和变量高亮显示功能来确定您的代码使用函数和变量的时间和位置。如果可以连接到 Internet,可以观看“变量和函数突出显示”视频以了解主要功能的概要信息。

有关嵌套函数和各种类型的 MATLAB 变量的概念信息,请参阅在父函数与嵌套函数之间共享变量在工作区之间共享数据

使用自动函数和变量高亮显示功能

默认情况下,编辑器以各种渐变蓝色显示函数、局部变量和带有共享作用域的变量。带有共享作用域的变量包括:全局变量持久变量以及嵌套函数内的变量。(有关详细信息,请参阅嵌套函数。)

要启用和禁用突出显示功能或更改颜色,请点击 预设,然后选择 MATLAB > 颜色 > 编程工具。在 MATLAB Online™ 中,突出显示功能默认情况下处于启用状态,并且不能更改突出显示预设项。

默认情况下,编辑器的行为如下:

  • 在您将光标放在函数或变量名称内时以天蓝色高亮显示特定函数或局部变量的所有实例。例如:

  • 无论光标位置在哪儿,都以水鸭蓝显示带有共享作用域的变量。例如:

使用自动函数和变量高亮显示功能的示例

考虑对函数 rowsum 使用以下代码:

function rowTotals = rowsum
% Add the values in each row and 
% store them in a new array
 
x = ones(2,10);
[n, m] = size(x);
rowTotals = zeros(1,n);
for i = 1:n     
    rowTotals(i) = addToSum;
end
 
    function colsum = addToSum
        colsum = 0;
        thisrow = x(i,:);
        for i = 1:m
              colsum = colsum + thisrow(i);
        end
    end
 
end

运行该代码时,不会返回每行的值并显示以下结果:

ans =

    10    10

MATLAB 会转而显示以下结果:

ans =

     0     0     0     0     0     0     0     0     0    10

按照下列步骤检查该代码:

  1. 主页选项卡上的环境部分中,点击 预设并选择 MATLAB > 颜色 > 编程工具。确保选择自动突出显示具有共享范围的变量

  2. rowsum 代码复制到编辑器中。

    请注意变量 以水鸭蓝显示,这表示 i 不是局部变量。rowTotals 函数和 addToSum 函数都设置和使用变量 i

    第 6 行的变量 n 显示为黑色,表示它未跨越多个函数。

  3. 将鼠标指针悬停在变量 i 的实例上方。

    随即出现工具提示:变量“i”的作用域跨越多个函数。

  4. 点击工具提示链接以了解其作用域跨越多个函数的变量相关信息。

  5. 点击 i 的实例。

    i 的每次引用都会用天蓝色高亮显示,标记显示在编辑器右侧的指示标记条中。

  6. 将鼠标光标悬停在某个指示标记条的标记上方。

    随即出现工具提示,其中显示函数或变量名称以及用标记表示的代码行。

  7. 点击标记以导航至在该标记的工具提示中指定的行。

    如果您的文件包含许多代码,您在编辑器中不能一次查看完,上述做法非常有用。

通过将第 15 行的 i 的实例更改为 y 来修复代码。

在函数引用上点击时,您可以看到类似的高亮显示效果。例如,在 addToSum 上点击。