2010-09-17 15 views
5

He buscado aquí y en la red, pero no hay respuesta.¿F es sensible a mayúsculas y minúsculas?

La razón que pido es, desde F # convenciones parece que están a favor de las letras no son de capital, utilizando tipos de BCL con las convenciones Pascal miran raro en Fa #, como en:

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

parece que sería más en el espíritu de F # como esto:

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

Respuesta

8

Ok, algunas cosas.

Primero, F # distingue entre mayúsculas y minúsculas.

En segundo lugar, las convenciones F # para nombrar se describen en el F# Component Design Guidelines . En resumen, los miembros de let-bound dentro de los módulos de F # usan camelCase, pero todos los constructivos de .NET OO usan PascalCase. Esto es cierto en toda la biblioteca F #.

Por último, en Fa # string no es una palabra clave, sino que es a la vez el nombre de un type abbreviation (por System.String) y el nombre de un function (que se convierte en una cadena). En el contexto de expresión de string.Join, el nombre de la función tiene prioridad, por lo que string.Join no funciona. Y debido a la distinción entre mayúsculas y minúsculas, System.String.join nunca funcionaría (a menos que, por ejemplo, haya agregado un miembro de extensión).

+0

Gracias increíble respuesta. Parece que te voy a preguntar un montón de preguntas sobre F # si no te importa: O –

+0

Maldición, iba a aprender F # pero no lo haré por esto ... – beppe9000

1

Sorprendentemente, the F# Language Specification no menciona explícitamente caso-sensibilidad, pero sí se refiere a la utilización de diferentes carcasa para intrínsecos/idioma y los parámetros de tipo definidos por el usuario (5.1.2)

Si bien mi experiencia con F # es limitada (más allá de las aplicaciones Hello World-style), supongo que string.join no se une a String.Join.

+0

Ok, puedo entender Join no se encuentra en String, pero en C# string o String funciona para acceder a sus miembros. ¿Por qué esto no funciona en F #? ¿Es esto algo de magia IDE detrás de las cubiertas para C#? –

+3

En C#, 'cadena' es una palabra clave que significa 'System.String'. En F #, 'cadena' es el nombre de una función, así como un alias de tipo, y no una palabra clave. – Brian

2

Sí, F # es entre mayúsculas y minúsculas

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

no funcionará.

Cuestiones relacionadas