2014-02-09 4 views
3

type t1 = A of int * string и type t2 = A of (int * string), они разные или одинаковые?В чем разница между этими двумя определениями типов в OCaml

В этом functional programming tutorial, слайд 6, он говорит

В OCaml, варианты взять несколько аргументов, а не принимать кортежи в качестве аргументов: ИНТ * струны ди Ф.Ф. различны, чем А (INT * строка). Но это не важно, если вы его не укусили.

Но я не вижу никакой разницы, кроме пары скобок.

+1

Это два разных типа. Об этом спрашивали и много раз отвечали на SO. Вот примеры: http://stackoverflow.com/questions/14818866/int-int-vs-int-int-in-ocaml-sum-type/14819463#14819463 http://stackoverflow.com/questions/10306733/ocaml -constructor-распаковка/10306865 # 10306865 –

ответ

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 аргумента (поставляется в виде Скобках, comma- отделенная вещь).

Смежные вопросы