首页 文章

OCaml中这两种类型定义之间有什么区别[重复]

提问于
浏览
3

这个问题在这里已有答案:

type t1 = A of int * stringtype t2 = A of (int * string) ,它们是不同还是相同?

在这个functional programming tutorial,幻灯片6,它说

在OCaml中,变体采用多个参数而不是将元组作为参数:int * string的一个不同于(int * string)的A . 但除非你被它咬了,否则它并不重要 .

但除了一对括号外,我没有看到任何区别 .

1 回答

  • 0

    请尝试以下方法:

    type t1 = A of int*int
    type t2 = B of (int*int)
    let x = (1,2) in A x (* does not work *)
    let x = (1,2) in B x (* works *)
    

    也就是说, B 是一个期望1个参数的构造函数(即一个包含两个整数的元组),而 A 是一个接受2个参数的构造函数(作为带括号的逗号分隔的东西提供) .

相关问题