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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

haskel where子句不在范围内错误

来自分类Dev

Dapper / EF-当变量不在使用范围内时,为什么性能会提高

来自分类Dev

Haskell变量不在范围内

来自分类Dev

Haskell:变量不在范围内吗?

来自分类Dev

Haskell变量不在范围内

来自分类Dev

AngularJS变量不在视野范围内

来自分类Dev

为什么“变量不在范围内”

来自分类Dev

确保范围内的模式不匹配

来自分类Dev

跳至保护模式时重置

来自分类Dev

不在范围内:<*>

来自分类Dev

不在范围内

来自分类Dev

定义“w”的类型时出现“变量不在范围内:w :: Integer”错误

来自分类Dev

Gradle全局变量不在buildscript范围内

来自分类Dev

Excel字符串变量不在范围内

来自分类Dev

如何解决“变量不在范围内”错误?

来自分类Dev

类变量不在类函数的范围内

来自分类Dev

为什么if语句不在全局范围内寻找变量

来自分类Dev

即使不在范围内,也不断观察eclipse中的变量

来自分类Dev

括号和范围内的 Python 变量

来自分类Dev

Haskell-声明set时x不在范围内

来自分类Dev

打开RandomAccessStream时,“值不在预期范围内”

来自分类Dev

编译g ++时不在范围内声明

来自分类Dev

邮箱不在范围内

来自分类Dev

不在Haskell范围内

来自分类Dev

不在范围内错误

来自分类Dev

允许变量在本地范围内使用

来自分类Dev

在Excel范围内使用变量

来自分类Dev

范围内的变量

来自分类Dev

进入保护模式时出现三重故障