使用where子句和保护模式匹配时变量不在范围内
假设我有这段代码:
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 (…) = …