rad*_*row 2 haskell if-statement
MultiWayIf使用|警卫无法实现的扩展提供什么,反之亦然?
例如,可以编写相同的函数
f x | x == 0 = -1
| otherwise = x
Run Code Online (Sandbox Code Playgroud)
要么
f x = if | x == 0 -> -1
| otherwise -> x
Run Code Online (Sandbox Code Playgroud)
除了使用的语法糖之外,我没有看到这两个例子之间有任何区别.在哪些情况下我应该更喜欢一个而不是另一个?
if不应该使用Multiway 而不是功能保护.如果你可以使用警卫,你应该这样做.但是多路径if也可以用在表达式的中间,就像case,例如:
f x = "The argument is " ++
if | x > 0 -> "positive"
| x < 0 -> "negative"
| otherwise -> "zero"
Run Code Online (Sandbox Code Playgroud)
就个人而言,我确实发现这个具体例子的清晰度值得怀疑,但这就是区别.