美文网首页
Let Expressions

Let Expressions

作者: christ_yang | 来源:发表于2020-05-30 23:03 被阅读0次

    Let Expressions

    Let表达式是一个非常重要的特性,可以以非常简单、通用、灵活的方式创建并使用局部变量,以使我们的代码风格更好,也可以使编码更方便,我们可以在其内部使用任何绑定,包括嵌套let
    注意:let表达式就是一个普通的表达式,它可以在任何允许使用表达式的地方被使用

    1. 语法(syntax):
      let b1 b2 ... bn in e end
      其中:bi是任一绑定,e是任一表达式
    let val a = 8
        val b = 9
    in
      a+b
    end
    整个表达式返回:17
    
    1. 类型检查(type check)和 求值规则(evaluation rules):
    • 类型检查
      在一个包含早期绑定的静态环境(static environment)中,检查每个绑定bi和表达式e,整个Let表达式的类型就是e的类型。
    • 求值规则
      在一个包含早期绑定的动态环境(dynamic environment)中,计算每个绑定bi和表达式eLet表达式的值就是e的值。
      注意:若局部绑定内有与上级绑定相同名称,那么该局部绑定将会屏蔽外部绑定。

    实例

    fun silly1 (z : int) =
      let val x = if z > 0 then z else 34
        val y = x+z+9
      in
        if x > y then x*2 else y*y
      end
    
    fun silly2 () =
      let val x = 1
      in
        (let val x = 2 in x+1 end) + (let val y = x+2 in y+1 end)
      end
    silly2的风格很糟糕,但这里只是想表达let只是一个普通的表达式。
    

    新概念( scope)

    let的引入,让我们意识到一个新概率,即绑定的使用是有范围( scope)的限制,如:我们不能在顶级绑定中,使用已定义的let内的定义的绑定。

    fun silly3 () =
      let val x = 3
      in x
      end
    
    val bad-x = x
    这里的x将是未定义的绑定,它不会使用到在let表达式中定义的任何x
    

    相关文章

      网友评论

          本文标题:Let Expressions

          本文链接:https://www.haomeiwen.com/subject/ouqhyctx.html