2009-11-16 51 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。

我也不建议这样做,尽管我喜欢短节目。