让和属性分配在一行

aan*_*ann 5 f# properties variable-assignment

如何在一行中编写以下F#代码(或类似代码):

let contextMenu = new ContextMenuStrip()
mainForm.ContextMenuStrip <- contextMenu
Run Code Online (Sandbox Code Playgroud)

我必须声明contextMenu,因为稍后将需要它.

Str*_*ger 6

我不建议你把它写在一行上,因为这意味着它将是#light(现在默认模式)和非#light语法之间的混合.如果你真的需要,你可以使用;; 像那样:

open System
open System.Windows.Forms

let mainForm = new Form()
let contextMenu = new ContextMenuStrip();; mainForm.ContextMenuStrip <- contextMenu;;
Run Code Online (Sandbox Code Playgroud)

如果表达式具有单元类型,则可以使用顺序执行表达式,它是表单的表达式:

expr1; expr2; expr3
Run Code Online (Sandbox Code Playgroud)

例如:

mainForm.ContextMenuStrip <- contextMenu; 5 + 6 |> ignore; mainForm.ContextMenuStrip <- null
Run Code Online (Sandbox Code Playgroud)

我想补充一点,顺序执行表达式与非#light模式无关.它们只是一种通用的语言结构.

希望能帮助到你.


Chr*_*ith 6

您可以在构造函数中将public,writeable属性设置为伪参数.

let contextMenu = new ContextMenuStrip()
let form = new Form(ContextMenuStrip = contextMenu)
Run Code Online (Sandbox Code Playgroud)


cfe*_*ern 5

你也可以输入

let contextMenu = new ContextMenuStrip() in mainForm.ContextMenuStrip <- contextMenu
Run Code Online (Sandbox Code Playgroud)

这是OCAMl语法,IIRC.

编辑:更清楚:这也是有效的(#light)F#语法,因为F#基于OCaml.

即使我喜欢短程序,我也不建议这样做.