我是Haskell的新手,我对Where vs. Let感到非常困惑.它们似乎都提供了类似的目的.我已经阅读了Where与Let之间的一些比较,但我无法辨别何时使用每个.有人可以提供一些上下文或者一些示例,说明何时使用其中一个?
哪里与让
甲
where子句只能在一个函数定义的电平来定义.通常,这与let定义的范围相同.唯一的区别是使用警卫时.该where条款的范围扩展到所有警卫.相反,let表达式的范围只是当前的函数子句和guard,如果有的话.
该哈斯克尔维基是非常详细,并提供各种案件,但它使用的假设的例子.我觉得它的解释对初学者来说太简短了.
让我们的优势:
f :: State s a
f = State $ \x -> y
where y = ... x ...
Run Code Online (Sandbox Code Playgroud)
将无法工作,因为where指的是模式匹配f =,其中没有x在范围内.相比之下,如果你开始使用let,那么你就不会遇到麻烦了.
f :: State s a
f = State $ \x ->
let y = ... x ...
in y
Run Code Online (Sandbox Code Playgroud)
其中的优点:
f x
| cond1 x = a
| cond2 …Run Code Online (Sandbox Code Playgroud)