if-statement - MultiWayIf 和经典守卫有什么区别?

标签 if-statement haskell

MultiWayIf 扩展提供哪些不能使用 | 守卫来完成,反之亦然?

例如,一个人可以编写相同的函数

f x | x == 0 = -1
    | otherwise = x

f x = if | x == 0 -> -1
         | otherwise -> x

除了使用的语法糖之外,我看不出这两个示例之间有任何区别。在某些情况下我应该更喜欢其中一种吗?

最佳答案

Multiway if 不应该被用来代替函数守卫。如果你可以使用 guard ,你应该这样做。但是多路 if 也可以用在表达式中间,很像 case,例如:

f x = "The argument is " ++ 
         if | x > 0 -> "positive"
            | x < 0 -> "negative"
            | otherwise -> "zero"

就我个人而言,我确实觉得这个具体示例的清晰度相当值得怀疑,但这就是不同之处。

关于if-statement - MultiWayIf 和经典守卫有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54674370/

相关文章:

python - 即使输出与原始输出相同,代码仍会保存文档?

c# 两个嵌套的 if 语句,一个 else

haskell - 我在哪里可以了解#ifdef?

haskell - Haskell 中的 exp x 和类型签名

haskell - 如何为包装函数的类型编写任意实例?

haskell - (^) 的奇怪行为

javascript - 如果检查通过,为什么会这样?

javascript - 关于 Javascript For 循环

python - Python 中 if/else 循环的问题

parsing - Haskell 解析 - Parsec 与 Alex