2010-09-17 22 views
5

Ich suchte hier und im Netz aber keine Antwort.Ist F # Groß-/Kleinschreibung?

Der Grund, warum ich frage ist, da Konventionen F # scheinen, wie sie noncapital Buchstaben bevorzugen, BCL-Typ mit Pascal Konventionen seltsam aussieht in F # verwendet wird, wie in:

let stringD = String.Join(" ",[| stringA; stringB |]) 

Scheint, wie es im Geist wäre mehr von F # wie folgt aus:

let stringD = string.join(" ",[| stringA; stringB |]) 

Antwort

8

Ok, ein paar Dinge.

Zuerst wird bei F # die Groß-/Kleinschreibung beachtet.

Zweitens, die F # Konventionen für die Benennung sind in der F# Component Design Guidelines beschrieben. Kurz gesagt, Let-gebundene Member innerhalb von F # -Modulen verwenden camelCase, aber alle .NET OO-Konstrukte verwenden PascalCase. Dies gilt für die gesamte F # -Bibliothek.

schließlich in F # string ist kein Schlüsselwort, vielmehr ist es sowohl der Name eines type abbreviation (für System.String) und der Name eines function (das in einen String konvertiert). Im Ausdruckskontext von string.Join hat der Funktionsname Vorrang, weshalb string.Join nicht funktioniert. Aus Gründen der Groß- und Kleinschreibung würde System.String.join niemals funktionieren (es sei denn, Sie haben beispielsweise ein Erweiterungselement hinzugefügt).

+0

Danke tolle Antwort. Sieht so aus, als würde ich euch hier viele F # Fragen stellen, wenn es euch nichts ausmacht: O –

+0

Verdammt, ich wollte F lernen, aber ich werde nicht wegen ... – beppe9000

1

Überraschenderweise hat the F# Language Specification nicht explizit Fall Empfindlichkeit erwähnen, aber unter Verwendung unterschiedlicher Gehäuse für intrinsics/Sprache und benutzerdefinierten Typ-Parameter (5.1.2)

bezieht

Während meine Erfahrung mit F # begrenzt ist (jenseits Hello World-style Apps) würde ich annehmen, dass string.join nicht an String.Join bindet.

+0

Ok ich kann verstehen Join wird nicht in String gefunden, aber in C# string oder String funktioniert, um auf seine Mitglieder zuzugreifen. Warum funktioniert das nicht in F #? Ist das etwas IDE-Magie hinter den Abdeckungen für C#? –

+3

In C# ist 'string' ein Schlüsselwort, das 'System.String' bedeutet. In F # ist "String" der Name einer Funktion sowie ein Typalias und kein Schlüsselwort. – Brian

2

Ja, F # ist case-sensitive

let stringD = string.join(" ",[| stringA; stringB |]) 

wird nicht funktionieren.