是什么原因导致“无可辩驳的模式失败的模式”?这意味着什么?
什么是
无可辩驳的模式失败了
意思? 什么情况会导致这个运行时错误?
What does
irrefutable pattern failed for pattern
mean?
What cases will cause this runtime error?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
考虑这个例子:
这使用了无可辩驳的模式(
~
部分)。无可辩驳的模式总是“匹配”,所以这会打印hello
。现在,模式仍然匹配,但是当我们尝试使用
x
但它实际上并不存在时,我们得到了一个无可辩驳的模式匹配错误:这与没有匹配时得到的错误有微妙的区别模式:
这个输出
当然,这是一个有点人为的例子。更可能的解释是它来自
let
绑定中的模式,按照 chrisdb 的建议。Consider this example:
This uses an irrefutable pattern (the
~
part). Irrefutable patterns always "match", so this printshello
.Now, the pattern still matched, but when we tried to use
x
when it wasn't actually there there we got an irrefutable pattern match error:This is subtly distinct from the error you get when there's no matching pattern:
This outputs
Of course, this is a somewhat contrived example. The more likely explanation is that it came from a pattern in a
let
binding, as chrisdb suggested.好吧,我认为它的意思就是它所说的——模式不匹配,但别无选择。这个例子:
来自 http://www.haskell.org/haskellwiki/Debugging
该示例的要点是如果
f x
返回Nothing
,那么 GHC 就无法为y
赋值。Well, I assume it means what it says - that a pattern doesn't match but there is no alternative. This example:
Comes from http://www.haskell.org/haskellwiki/Debugging
The point of the example is that if
f x
returnsNothing
then there is no way GHC can assign a value toy
.要添加其他人所说的内容,如果您断开的列表小于您想要的列表,那么从技术上讲您可以获取它。例如(在 GHCi 中):
工作正常,但如果您这样做:
To add what others have said, you could technically get it if you're disconnecting a list that's smaller than what you're intending. For example (in GHCi):
Works fine, but if you did: