2011-01-07 16 views
5

al utilizar clases .NET, hay casos en que no necesitamos paréntesis para pasar un solo parámetro comoF # constructor de sintaxis

let foo = DirectoryInfo "boo" 

pero algo un poco más complicado el uso de un solo parámetro, necesitamos paréntesis ... ¿Alguien sabe las reglas de análisis cuando esto es cierto?

Respuesta

4

En F #, todas las funciones toman un solo parámetro. Ahora esto puede ser un poco confuso al principio, porque puede tener una función que parece tomar más de un parámetro, pero en realidad está pasando un único parámetro que es una tupla.

Aquí está un ejemplo sencillo de constructores que parece como que toman más de 1 parámetro:

let foo = DirectoryInfo "boo" //passing 1 argument 
let foo2 = DirectoryInfo ("boo") //passing 1 argument that is a tuple 
let foo3 = StringBuilder ("blah", 100) //passing 1 argument again 
let foo4 = StringBuilder "blah" 100 //does not compile 

Para obtener más información sobre este estilo, echa un vistazo a Tuples on MSDN.

Ahora, también hay otro método ligeramente diferente para hacer que parezca que una función requiere más de 1 argumento. Esto se llama currying, que verá más a menudo cuando se trata solo de código F #. Aquí hay un quick example de esto.

+1

gracias por la respuesta, soy consciente de la tupla entre paréntesis, pero vi que en algunos casos las clases .net deben tener sus parámetros entre paréntesis, aunque es un parámetro único, y ahora creo que es cuando el objeto es IDisposable y necesitamos usar el nuevo operador. entonces, algo como nuevo SomeDisposable (foo) necesita paréntesis – Alex

+0

No estoy seguro de que sea exacto. Por ejemplo, con 'FileSystemWatcher' esto compila bien: ' let watcher = new FileSystemWatcher "blah" ' – wsanville

+0

Vale la pena señalar que muchos ejemplos de código F # siempre usan paréntesis al invocar un constructor de clase. Si bien esto es necesario para los constructores de clase multiparamétrica, hacerlo en singular hace que las llamadas de constructor de clase se vean como la forma típica de llamadas discriminatorias de constructor de unión, que son comunes en la mayoría de los lenguajes de ML-family. – pblasucci

Cuestiones relacionadas