赋值和作用域
赋值操作将标识符绑定到变量、选项或函数。程序中的每个标识符都必须被赋值。
Flux 使用代码块进行词法作用域划分
- 预分配标识符的作用域在 universe 代码块中。
- 表示顶级(任何函数外部)变量、选项或函数的标识符的作用域是 package 代码块。
- 导入包的名称的作用域是包含导入声明的文件的 file 代码块。
- 表示函数参数的标识符的作用域是函数体。
- 在函数内部赋值的标识符的作用域是最近的包含代码块。
在一个代码块中赋值的标识符可以在内部代码块中重新赋值,选项标识符除外。当内部赋值的标识符在作用域内时,它表示由内部赋值操作赋予的实体。
请注意,package 子句不是赋值操作。包名称不会出现在任何作用域中。它的目的是标识属于同一包的文件,并为导入声明指定默认包名称。
变量赋值
变量赋值创建一个绑定到标识符的变量,并为其赋予类型和值。变量在其生命周期内保持相同的类型和值。在一个代码块中赋值给变量的标识符不能在同一代码块中重新赋值。标识符可以在内部代码块中重新赋值或被覆盖。
VariableAssignment = identifier "=" Expression .
变量赋值示例
在此代码片段中,n
和 m
在外部代码块中定义为整数。在匿名函数中,n
和 m
定义为字符串,但仅在该作用域内有效。因此,虽然该函数将返回 "ab"
,但外部作用域中的 n
和 m
保持不变,仍然是 n = 1
和 m = 2
。
n = 1
m = 2
x = 5.4
f = () => {
n = "a"
m = "b"
return n + m
}
选项赋值
OptionAssignment = "option" [ identifier "." ] identifier "=" Expression .
选项赋值创建一个绑定到标识符的选项,并为其赋予类型和值。选项只能在 package 代码块中赋值。一旦声明,选项就不能在同一 package 代码块中重新声明。在一个包中声明的选项可以在另一个包中重新赋值新值。选项在其生命周期内保持相同的类型。
示例
// alert package
option severity = ["low", "moderate", "high"]
// foo package
import "alert"
option alert.severity = ["low", "critical"] // qualified option
option n = 1
option n = 2
f = (a, b) => a + b + n
x = f(a:1, b:1) // x = 4
此页内容是否对您有帮助?
感谢您的反馈!