2009-11-16 2 views
5

Come è possibile scrivere il seguente codice F # (o simili) in una sola riga:Let e ​​assegnazione di proprietà in una linea

let contextMenu = new ContextMenuStrip() 
mainForm.ContextMenuStrip <- contextMenu 

devo dichiarare contextMenu in quanto sarà necessario in seguito.

risposta

6

Non ti consiglio di scriverlo su una singola riga perché questo significa che sarà un mix tra la sintassi #light (la modalità predefinita ora) e non #light. Se hai davvero bisogno, puoi usare ;; così:

open System 
open System.Windows.Forms 

let mainForm = new Form() 
let contextMenu = new ContextMenuStrip();; mainForm.ContextMenuStrip <- contextMenu;; 

Se le espressioni hanno tipo di unità è possibile utilizzare un'espressione esecuzione sequenziale, che è un'espressione della forma:

expr1; expr2; expr3 

per esempio:

mainForm.ContextMenuStrip <- contextMenu; 5 + 6 |> ignore; mainForm.ContextMenuStrip <- null 

I 'Vorrei aggiungere che Espressioni Esecuzione Sequenziale non hanno nulla a che fare con la modalità non #illuminazione. Sono solo un costrutto di linguaggio generale.

Spero che aiuti.

6

È possibile impostare proprietà pubbliche, scrivibili come parametri pseudo nel costruttore.

let contextMenu = new ContextMenuStrip() 
let form = new Form(ContextMenuStrip = contextMenu) 
+1

Perché è stato votato? – rysama

+1

+1, la mia ipotesi è che ci potrebbe essere un effetto collaterale nel setter della proprietà e ha spaventato qualcuno. Mi piace questa sintassi. Incoraggia le persone a scrivere piccoli costruttori e utilizzare invece le proprietà. – gradbot

+0

Oh capisco, sta impostando il valore nel Form, non nel ContextMenuStrip. Quindi non risponde alla domanda anche se ho ancora trovato questa risposta d'uso. let contextMenu = new ContextMenuStrip() let mainForm = new Form (ContextMenuStrip = contextMenu) – gradbot

5

Si potrebbe anche digita

let contextMenu = new ContextMenuStrip() in mainForm.ContextMenuStrip <- contextMenu 

Questa è la sintassi di OCaml, IIRC.

Modifica: per maggiore chiarezza: è valida anche (#light) sintassi F #, poiché F # è basato su OCaml.

Anche io non consiglio di farlo, anche se mi piacciono i programmi brevi.