2010-09-17 3 views
5

J'ai cherché ici et sur le net mais pas de réponse.Est-ce que F # est sensible à la casse?

La raison pour laquelle je demande est, puisque F # conventions semble comme ils favorisent des lettres qu'en capital, en utilisant les types BCL avec les conventions Pascal l'air bizarre en F #, comme dans:

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

On dirait que ce serait plus dans l'esprit de F # comme ceci:

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

Répondre

8

Ok, quelques petites choses.

D'abord, F # est sensible à la casse. Deuxièmement, les conventions F # pour la dénomination sont décrites dans le F# Component Design Guidelines . Brièvement, les membres liés à la lettrine dans les modules F # utilisent camelCase, mais toutes les constructions .NET OO utilisent PascalCase. C'est vrai dans toute la bibliothèque F #.

Enfin, en F # string n'est pas un mot-clé, mais plutôt est à la fois le nom d'un type abbreviation (pour System.String) et le nom d'un function (qui se transforme en une chaîne). Dans le contexte d'expression de string.Join, le nom de la fonction est prioritaire, ce qui explique pourquoi string.Join ne fonctionne pas. Et en raison de la sensibilité à la casse, System.String.join ne fonctionnerait jamais (sauf si vous avez ajouté un membre d'extension).

+0

Merci réponse incroyable. On dirait que je vais vous poser beaucoup de questions F # ici si cela ne vous dérange pas: O –

+0

Merde j'allais apprendre F # mais je ne vais pas à cause de cela ... – beppe9000

1

Étonnamment, the F# Language Specification ne mentionne pas explicitement la casse, mais ne fait pas référence à l'utilisation de différents boîtier pour intrinsics/langue et des paramètres de type définis par l'utilisateur (5.1.2)

Alors que mon expérience avec F # est limitée (au-delà des applications Hello World-style), je suppose que string.join ne se lie pas à String.Join.

+0

Ok Je peux comprendre Join n'étant pas trouvé dans Chaîne, mais dans Chaîne C# ou Chaîne fonctionne pour accéder à ses membres. Pourquoi cela ne fonctionne-t-il pas en F #? Est-ce une magie IDE derrière les couvertures pour C#? –

+3

En C#, 'chaîne' est un mot-clé qui signifie 'System.String'. En F #, 'chaîne' est le nom d'une fonction ainsi qu'un alias de type, et non un mot-clé. – Brian

2

Oui, F # est sensible à la casse

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

ne fonctionnera pas.

Questions connexes