2009-11-16 41 views
5

你怎麼能寫在一行下面的F#代碼(或類似):讓與財產分配在同一行

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

我必須聲明文本菜單因爲以後需要。

回答

6

我不建議你把它寫在一行上,因爲這意味着它將是#light(現在默認的模式)和非#light語法之間的混合。如果你確實需要,你可以使用;;這樣的:

open System 
open System.Windows.Forms 

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

如果你的表情有單位類型,你可以使用順序執行的表達,這是形式的表達式:

expr1; expr2; expr3 

例如:

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

我我想補充一點,順序執行表達式與非#light模式無關。它們只是一種通用語言結構。

希望它有幫助。

6

您可以將公共可寫屬性設置爲構造函數中的僞參數。

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

這是爲什麼被拒絕? – rysama 2009-11-16 18:01:55

+1

+1,我的猜測是,在財產製定者可能會有一個副作用,它嚇到了一個人。我喜歡這種語法。它鼓勵人們編寫小構造函數並使用屬性。 – gradbot 2009-11-16 19:34:26

+0

哦,我明白了,他設置的值不是ContextMenuStrip。所以它不回答這個問題,儘管我仍然找到了這個使用答案。 let contextMenu = new ContextMenuStrip() let mainForm = new Form(ContextMenuStrip = contextMenu) – gradbot 2009-11-16 19:39:28

5

你也可以輸入

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

這是OCaml的語法,IIRC。

編輯:更清楚:這也是有效的(#light)F#語法,因爲F#基於OCaml。

我也不建議這樣做,儘管我喜歡短節目。