我试图理解以下语句,但卡住了:
“从技术上讲,形式参数也是模式,但它们永远不会匹配失败。”
通过我的一点经验,比如对C这样的非函数语言的相对较大熟悉,我可以确定形式参数是函数定义中的参数。所以,如果在C中有一个如下的函数:
int func_add(int a, int d)
如果我没记错的话,那么传递字符串等其他类型的值将在模式匹配中失败。因此,调用 func_add
时传递 func_add("trs", 5)
是一种模式不匹配的情况。
类似的情况在 Haskell 中也可能发生,当代码通过传递不同类型的参数来调用函数时,很可能会出现错误的理解或解释。
那么,为什么说在 Haskell 中形式参数是不可辩驳的模式匹配呢?
(x, y)
这样看似可反驳的模式(或者,它可以被重写为(,) x y
,一个可反驳的字面常量后跟两个不可反驳的变量)可以被视为不可反驳的,因为经过类型检查后,只有由(,)
创建的值是合法的。 - chepner