【问题标题】:Where within Let, Haskell Scoping,在 Let,Haskell 范围内,
【发布时间】:2013-12-27 22:15:38
【问题描述】:

我想在下面的 where 子句中访问 let 绑定。​​

为什么此代码会失败? 更重要的是:如何让它发挥作用?

test bar = let baz = bar - 1 in
 foo where
  foo = baz`

它说: 不在范围内:baz' Perhaps you meantbar'

【问题讨论】:

  • 您是真的想写baz' 还是您想要的baz

标签: haskell scope where-clause let


【解决方案1】:

您可以将 where 视为另一种在属于单个匹配项的右侧写 let 的方式。

在你的情况下,这很容易,因为只有一个右手边。因此,您写道:

test bar = let foo = baz in let baz = bar-1 in foo

这是行不通的。我建议坚持使用 wherelet,最惯用的是:

test bar = foo
    where
       foo = baz
       baz = bar -1

除此之外,当您只定义 baz 时,baz' 将永远不会在范围内。

【讨论】:

    【解决方案2】:

    where 子句只能访问封闭函数的参数和任何更高级别的绑定。您可以将baz 作为参数传递给foo

    test bar = let baz = bar - 1 in (foo baz)
      where foo x = x
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-14
      • 1970-01-01
      • 2017-08-18
      • 1970-01-01
      相关资源
      最近更新 更多