constructor - 使用只有一个元组值的变体类型构造函数

标签 constructor ocaml

# 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/

相关文章:

java - Apache Storm - 用另一个 bolt 组成一个 bolt

java - Java 应用程序中需要多少个构造函数?

java - 如何将变量从一个类发送到另一个类。

OCaml lex : doesn't work at all, 无论如何

function - OCaml:绑定(bind)表达式与函数

c++ - 如何在派生构造函数的大括号内初始化基构造函数? C++

c++ - 使用多个构造函数调用初始化成员变量

ocaml - 从 OCaml 编译器打开模块而不构建自定义顶层

if-statement - Ocaml if-then-else 语法错误

module - OCaml 中的好友模块