# type foo = Foo of int * int
# let t = (1, 2)
# Foo t
Error: The constructor Foo expects 2 argument(s),
but is applied here to 1 argument(s)
我必须怎么做Foo (1, 2)
甚至为了避免这个错误t有合适的类型吗?
在我看来,这是 OCaml 语法中令人不安的部分之一。不管它看起来如何,构造函数 Foo 不需要 2 元组作为其参数。从语法上来说,它需要括号中的两个值——但它们不是一个元组。所以情况很简单t
类型错误。使这项工作有效的方法是:
let (a, b) = t in Foo (a, b)
问题确实在于括号被用于两种不同的事物(或者我是这么声称的)。一旦你习惯了这一点,处理起来就不那么困难了。
Edit: 如果你want构造函数 Foo 接受单个元组,而不是两个单独的值,您可以这样定义它:
type foo = Foo of (int * int)
然后你的原始代码的其余部分就可以工作了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)