Mat*_*hid 16 haskell coding-style
今天,我发现自己键入以下代码:
case () of
_ | x < 15 -> ...
_ | x < 25 -> ...
_ | x < 50 -> ...
_ -> ...
Run Code Online (Sandbox Code Playgroud)
这个意思很直接,但只是感觉...... 说错了case ()
.有没有人有更好的建议?
我想,因为我在品牌上x
,我本来可以写的case x
.但这仍然让我没有任何实际的模式匹配; 这都是关于守卫的.这仍然感觉很奇怪.
Tho*_*son 14
其他人已经提到case
如果存在精细和多路,但我会通过where或let语句来寻找本地函数:
someFunction = do
x <- monadicOp
let f y | y < 5 = expr1
| y < 15 = expr2
| y < 25 = expr3
| True = expr4
f x
Run Code Online (Sandbox Code Playgroud)
这在语法上比case语句解决方案更清晰,并且比multi-way更便携.
编辑:
如果不清楚,x
在这种情况下,当你定义受保护的函数(f
)时,被比较的值是否已经在范围内,那么你可以改为定义一个值:
someFunction = do
x <- monadicOp
let r | x < 15 = expr1
| x < 25 = expr2
r
Run Code Online (Sandbox Code Playgroud)