Let

Let 表达式

Let 表达式可用于从变量中的中间计算中捕获值。

let-expression:
      letvariable-listinexpression
variable-list:
      可变
      variable
,variable-list
variable:
      variable-name
=expression
variable-name:
      identifier

下面的示例显示要计算的中间结果,这些结果存储在变量 xyz 中,以供在后续计算 x + y + z 中使用:

let     x = 1 + 1,
        y = 2 + 2,
        z = y + 1 
in
        x + y + z

此表达式的结果为:

11  // (1 + 1) + (2 + 2) + (2 + 2 + 1)

在计算 let-expression 中的表达式时,存在以下情况 :

  • 变量列表中的表达式定义了一个新的作用域,其中包含来自 variable-list 产生式的标识符,并且在计算 variable-list 产生式中的表达式时必须存在 。 variable-list 中的表达式可能相互引用 。

  • 在计算 let-expression 中的表达式之前,必须先计算 variable-list 中的表达式 。

  • 除非使用了 variable-list 中的表达式,否则不能对其进行计算 。

  • 传播在计算 let-expression 中的表达式期间引发的错误 。

let 表达式可以看作是隐式记录表达式的语法糖。 下面的表达式与上面的表达式等效:

[     x = 1 + 1,
      y = 2 + 2,
      z = y + 1,
      result = x + y + z 
][result]