# 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)
甚至避免该错误 电话 有合适的类型吗?
最佳答案
在我看来,这是 OCaml 语法中令人不安的部分之一。不管它看起来如何,构造函数 Foo 不需要一个二元组作为它的参数。从语法上讲,它需要括号中的两个值——但它们不是元组。所以情况很简单t
类型错误。使这项工作的方法是说:
let (a, b) = t in Foo (a, b)
问题确实是括号被用于两种不同的事情(或者我声称)。一旦习惯了这一点,处理起来就不是那么困难了。
编辑 :如果您希望构造函数 Foo 采用单个元组,而不是两个单独的值,您可以像这样定义它:
type foo = Foo of (int * int)
然后其余的原始代码将起作用。
关于constructor - 使用只有一个元组值的变体类型构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9774671/