определение При чтении исходного кода F #, я нашел definition из List<'T>
типа, который выглядит следующим образом:Разъяснение Список <'T> синтаксиса
type List<'T> =
| ([]) : 'T list
| (::) : Head: 'T * Tail: 'T list -> 'T list
Может кто-нибудь, пожалуйста, объясните выше синтаксис? Компилятор предупреждает, что «эта конструкция устарела: она предназначена только для использования в библиотеке F #». Является ли синтаксис только старым способом определения дискриминационных союзов? Если да, то почему Tail
имеет тип 'T list -> 'T list
вместо 'T list
?
Would что также эквивалентно «типа MyList <'T> = | ([]) из 'списка T | (: :) головки:' T * Tail:«список T» ? –
Да, это во всех отношениях. Просто в принципе, (: :) - это функция. – GregRos
ОК, спасибо. Я сделал тестовый тип следующим образом: «type Test = | Case1: int -> Test | Case2: string -> Test". Хотя предупреждение об устаревании все еще существует, тип работает так, как ожидалось. 'let test1 = Case1 (5)', 'let test2 = Case2 ("test")'. Я думаю, вы правы - предупреждение означает, что мы должны использовать «Case1 of int» вместо «Case1: int -> Test». Еще раз спасибо. –