2011-11-22 15 views
6

Ho riscontrato un problema nella comprensione dell'uso delle parentesi in F #. Per illustrare con un semplice esempio, le 2 console seguenti si comportano in modo molto diverso. La prima non aspetta me di digitare nulla:Uso della parentesi in F #

open System 
let Main = 
    Console.WriteLine "Hello" 
    Console.ReadLine 

considerando che il secondo lo fa:

open System 
let Main = 
    Console.WriteLine "Hello" 
    Console.ReadLine() 

Come devo capire la differenza?

+1

Lo stesso errore è anche nel principale. Ha bisogno di argomenti, oppure è solo un valore. Il motivo per cui è ancora in esecuzione, è che il valore deve essere valutato, quindi è sufficiente che venga eseguito, ma è comunque sbagliato farlo in questo modo. Normalmente avresti 'args' come argomenti e restituirai un int come codice di uscita dalla funzione principale. –

risposta

10

Se una funzione non accetta parametri, si specifica l'unità value() come argomento, come nella seguente riga di codice.

initializeApp() 

Il nome di una funzione di per sé è solo un valore di funzione, quindi se si omettono le parentesi che indicano il valore unitario, la funzione viene semplicemente fatto riferimento, non ha chiamato.

http://msdn.microsoft.com/en-us/library/dd233229.aspx

Ecco perché quello che dovete fare Console.ReadLine() piuttosto che Console.ReadLine (quest'ultimo restituisce una funzione di delegato)

+0

Nota che potresti leggere Console.ReadLine come funzione di un parametro che è di tipo unità (()). –