参见关键字: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 的值保持不变,因为函数操作的是其参数的副本。
编程说明:虽然全局变量偶尔是解决编程问题的正确方案,但现代最佳实践不鼓励使用它们。依赖全局变量的代码在不同用户之间可能表现出不可预测的行为,并且难以调试。这是因为全局变量会引入系统性的影响,使得将错误定位到特定函数或函数内的特定循环变得困难。
版权所有 © 2024-2026 Octave中文网
ICP备案/许可证号:黑ICP备2024030411号-2