gpt4 book ai didi

haskell - 为什么我不应该混合制表符和空格?

转载 作者:行者123 更新时间:2023-12-03 10:15:01 25 4
gpt4 key购买 nike

我经常读到我不应该在 Haskell 中混合制表符和空格,或者我根本不应该使用制表符。为什么?

最佳答案

问题是双重的。首先,Haskell 对缩进敏感,例如以下代码无效:

example = (a, b)
where
a = "Hello"
b = "World"
两个绑定(bind)都需要缩进相同数量的空格/制表符(参见 off-side rule)。虽然在这种情况下很明显,但在下面的例子中却相当隐藏,我用 · 表示一个空格。和 » 的标签:
example = (a, b)
··where
····a = "Hello"
» b = "World"
如果编辑器将显示与四倍数对齐的选项卡,这将看起来像有效的 Haskell 代码。但事实并非如此。 Haskell 选项卡以 8 的倍数对齐,因此代码将被解释为:
example = (a, b)
··where
····a = "Hello"
» b = "World"
其次,如果您只使用选项卡,您可能会得到一个看起来不正确的布局。例如,如果选项卡显示有六个或更多空格(在本例中为八个),则以下代码看起来是正确的:
example = (a, b)
» where» a = "Hello"
» » b = "World"
但在另一个使用 4 个空格的编辑器中,它看起来不再正确:
example = (a, b)
» where» a = "Hello"
» » b = "World"
不过,它仍然是正确的。但是,习惯使用空格的人可能会重新缩进 b ' 与空格绑定(bind)并最终导致解析器错误。
如果您在整个代码中强制执行代码约定,以确保您只在行首使用制表符并在 where 之后使用换行符, letdo你可以避免一些问题(见 11)。但是, GHC warn about tabs by default 的当前版本, 因为他们 have been a source of many过去的解析器错误,因此您可能也想摆脱它们。
也可以看看
  • A reddit thread on the topic (大多数专业空间,但一些专业标签)
  • Good Haskell Style (专业空间)
  • Yet Another Tabs v Space debate (专业混音)
  • 关于haskell - 为什么我不应该混合制表符和空格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35855170/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com