7.1 全局变量

参见关键字:global

全局变量是一种可以在 Octave 中任何位置访问的变量。这与局部变量形成对比:局部变量只有通过显式传递(例如在调用函数时将其作为参数传入:fcn (local_var1, local_var2))才能在其当前上下文之外被访问。

使用 global 声明语句可以将变量声明为全局变量。以下语句都是全局声明。

global a
global a b
global c = 2
global d = 3 e f = 5

请注意,global 限定符的作用范围仅到下一个语句结束符为止,该结束符可以是逗号(‘,’)、分号(‘;’)或换行符(‘'\n'’)。例如,以下代码声明了一个全局变量 a 和一个局部变量 b,并将值 1 赋给后者。

global a, b = 1

全局变量在 global 语句中只能被初始化一次。例如,执行以下代码后

global gvar = 1
global gvar = 2

全局变量 gvar 的值是 1,而不是 2。执行 ‘clear gvar’ 命令不会改变上述行为,但 ‘clear all’ 则会。

为了访问这个全局变量,必须在函数体内将其声明为全局变量。例如,

global x
function f ()
  x = 1;
endfunction
f ()

并不会将全局变量 x 的值设置为 1,而是会创建一个名为 x 的局部变量并将其赋值为 1。要修改全局变量 x 的值,必须在函数体内也将其声明为全局变量,如下所示:

function f ()
  global x;
  x = 1;
endfunction

将全局变量作为参数传递到函数参数列表中时,函数会创建该变量的一个局部副本,而不会修改全局值。例如,给定函数

function f (x)
  x = 0
endfunction

并且在顶层将 x 定义为全局变量,

global x = 13

那么表达式

f (x)

在函数内部会将 x 的值显示为 0,但顶层 x 的值保持不变,因为函数操作的是其参数的副本

编程说明:虽然全局变量偶尔是解决编程问题的正确方案,但现代最佳实践不鼓励使用它们。依赖全局变量的代码在不同用户之间可能表现出不可预测的行为,并且难以调试。这是因为全局变量会引入系统性的影响,使得将错误定位到特定函数或函数内的特定循环变得困难。

 
tf = isglobal (name)

如果 name 是一个全局可见的变量,则返回 true。

例如:

global x
isglobal ("x")
   ⇒  1

另请参阅: isvarnameexist


版权所有 © 2024-2026 Octave中文网

ICP备案/许可证号:黑ICP备2024030411号-2