2013-06-10 7 views
6

Vor kurzem stieß ich auf einem Code wie so Listing:Deklarieren interne Typen in F #

type MyType = 
    | MyType of int 

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

Ich bin nicht vertraut mit der Verwendung von ‚und internen‘ (in der dritten Zeile), und ich habe mich gefragt, ob es einen Unterschied zwischen ‚Art interner‘ wie folgt aus:

type MyType = 
    | MyType of int 

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

ich habe mit beiden Formen kurz experimentiert, und ich kann einen Unterschied nicht sehen. Gibt es nur zwei verschiedene Möglichkeiten, dasselbe zu schreiben?

Antwort

5

In diesem Fall wird das and Schlüsselwort würde zu definieren mutally recursive typesMyType und MyInternal verwendet werden . Da MyType und MyInternal nicht gegenseitig rekursiv sind, ist and nicht erforderlich.

Wie die MSDN-Seite heißt es:

Das und Schlüsselwort ersetzt das Schlüsselwort type auf alle mit Ausnahme der ersten Definition

so die Definitionen äquivalent sind.

3

Nein, Ihr vorgeschlagener Code ist definitiv idiomatischer.

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

wird normalerweise nur verwendet, wenn die Typen gegenseitig rekursiv sind. es mit einem internen Typ Mit noch seltsamer wäre, da die Erbauer des ersten Typs auch interne müßten gemacht werden:

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