特定的函数名称“it”会发生什么?

jhu*_*jhu 7 haskell ghci

我只是与 Haskell 错误搏斗了一个小时,然后将其追溯到特定函数名称的使用it。有人可以解释为什么在下面的成绩单中函数名称fuit行为不同吗?具体来说,为什么在it调用时类型会发生变化?

?> fu x = x + 1
?> :t fu
fu :: Num a => a -> a
?> fu 1
2
?> :t fu
fu :: Num a => a -> a
?> it x = x + 1
?> :t it
it :: Num a => a -> a
?> it 1
2
?> :t it
it :: Num a => a
Run Code Online (Sandbox Code Playgroud)

当 ghci 重新启动时,它报告it不在范围内,所以我认为it默认情况下应该没有任何特殊含义。

ber*_*eal 10

在 GHCi 中,it始终绑定到最后一个计算过的表达式,并隐藏其先前的值:

Prelude> 2 + 3
5
Prelude> it
5
Prelude> 3 * 4
12
Prelude> it
12
Run Code Online (Sandbox Code Playgroud)

在 GHCi 会话开始时,它没有被定义。

  • 您可以在编译代码中或作为局部变量使用“it”。只有 GHCi 赋予了它特殊的含义。 (3认同)