let表达式用于创建局部作用域,在以下几种情况下很有用:
在let表达式里,你几乎可以做任何事,包括解构(后续练习会详细介绍),但不能定义新的自定义类型或类型别名。
let
cube x = x * x * x
in
cube a + cube b + cube c
beginWithPattern : Size -> Padding -> Pattern -> GameOfLife
beginWithPattern minimumSize padding pattern =
let
size = calculateSize minimumSize padding pattern
center = Size.center size
centeredPattern = Pattern.centerAt center pattern
dimensions = { width = size, height = size }
deadCells = Matrix.create dimensions Dead
in
GameOfLife (bringPatternToLife deadCells centeredPattern)
你生日时收到了一本新食谱,你想看看里面的千层面食谱是不是比你目前最喜欢的食谱更好。在这个练习里,你要写一些代码,帮助你按照新食谱做千层面。
你的室友还在办公室忙着,她想知道千层面什么时候能做好,好确保自己来得及赶回来。
创建一个函数,算出千层面什么时候能做好。为了让代码既简洁又有表现力,你应该使用let表达式。
定义remainingTimeInMinutes函数,它接收两个形参,并以一个 let 表达式作为函数体。第一个形参是千层面的层数,第二个形参是你开始烹饪后经过的分钟数。
在let表达式的let部分中定义expectedMinutesInOven,用来检查千层面应该在烤箱里烤多少分钟。根据食谱,预计的烤箱时间是 40 分钟:
expectedMinutesInOven
--> 40
在let表达式的let部分中定义preparationTimeInMinutes,它接收千层面的层数作为形参,并返回准备千层面需要多少分钟,假设每一层需要 2 分钟来准备。
preparationTimeInMinutes 3
--> 6
返回千层面做好前还剩多少分钟(在let表达式的in部分中),它等于preparationTimeInMinutes与expectedMinutesInOven之和,减去你开始烹饪后经过的分钟数。
remainingTimeInMinutes 3 10
--> 6 + 40 - 10 = 36