Let
2024年12月22日大约 1 分钟
Let
Let表达式
let表达式可以从变量的中间计算中捕获值。
let-expression:
let
variable-list in
expression
variable-list:
variable
variable ,
variable-list
variable:
variable-name =
expression
variable-name:
identifier
语法示例
let
a = error "a",
b = 2,
c = 3
in
b + c
let表达式可以看作是记录表达式的语法糖,下面的表达式和上面的等效:
[a = error "a", b = 2, c = 3, result = b + c][result]
注意
let表达式并不是完全等同于记录,尽管很像。
因为let表达式最后会使用result字段访问其他字段名,因此不支持特殊标识符。
// 符号错误
let type = 1 in type
// 符号错误
[type = 1, result = type][result]
// 正常
[type = 1][type]
在计算let表达式中的表达式时:
- 变量列表(variable-list)中的表达式定义了一个新的作用域,其中包含来自变量列表(variable-list)产生式的标识符,并且在计算变量列表(variable-list)产生式中的表达式时必须存在。变量列表(variable-list)中的表达式可以相互引用。
- 在计算let表达式(let-expression)中的表达式(expression)之前,必须先计算变量列表(variable-list)中的表达式(expression)。
- 除非变量列表(variable-list)中的表达式(expression)被访问,否则它们不会被计算。
- 传播计算let表达式(let-expression)时引发的错误。
let
a = {@b},
b = a
in
b