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/