使用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 (…) = …


以上是使用where子句和保护模式匹配时变量不在范围内的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>