2013-06-10 13 views
6

Ostatnio natknąłem się na kodzie wystawianie tak:Deklarowanie typów wewnętrznych w F #

type MyType = 
    | MyType of int 

and internal MyInternal = 
    | One of MyType 
    | Two of MyType 

nie jestem zaznajomiony z wykorzystaniem „i wewnętrzne” (w trzecim wierszu) i zastanawiałem się, czy nie było Wszelkie różnice między używaniem „typ wewnętrzny” tak:

type MyType = 
    | MyType of int 

type internal MyInternal = 
    | One of MyType 
    | Two of MyType 

mam eksperymentował z obu form krótko i nie widzę różnicy. Czy to tylko dwa różne sposoby napisania tego samego?

Odpowiedz

5

W tym przypadku słowo kluczowe and byłyby wykorzystywane do definiowania mutally recursive typesMyType i MyInternal . Ponieważ MyType i MyInternal nie są rekurencyjne, nie jest wymagane and.

Jak stwierdza stronie MSDN:

AND kluczowe zastępuje słowa kluczowego typu na wszystkich z wyjątkiem pierwszej definicji

więc definicje są równoważne.

3

Nie, sugerowany kod jest zdecydowanie bardziej idiomatyczny.

type T = ... 
and U = ... 

jest zwykle używany tylko wtedy, gdy typy są wzajemnie rekurencyjne. Używanie go z rodzajem wewnętrznego byłoby jeszcze bardziej dziwne, ponieważ konstruktorzy pierwszego rodzaju musiałyby być również wykonana wewnętrzna:

type T = internal | T of U 
and internal U = | U of T