假设我有这段代码:
data Command = Forward Integer
| Backwards Integer
doSomething givenCommand
| Forward value <- givenCommand = undefined
where calculatedValue = sqrt value
假设使用的未定义行calculatedValue
会非常长,calculatedValue
计算时间也会更长,因此,为了使代码更具可读性,我想使用where子句。
问题是value
在保护模式匹配中指定的变量不在where子句的范围内。
有没有解决的办法,这不会迫使我在保护线上执行计算吗?
谢谢。
value
的确不在范围之内,where
因为没有说给定的模式后卫将“开火”。如果模式失败,则没有value
,因此没有太大意义。
您可以let … in …
在此处使用子句:
doSomething givenCommand
| Forward value <- givenCommand = let calculatedValue = sqrt value in undefined
| … = …
但是这里您不需要模式保护,可以在doSomething
函数的开头进行模式匹配:
doSomething (Forward value) = undefined
where calculatedValue = sqrt value
doSomething (…) = …
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句