Let и Property Assignment в одну строку - PullRequest
5 голосов
/ 16 ноября 2009

Как написать следующий код F # (или аналогичный) в одной строке:

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

Я должен объявить contextMenu , поскольку это потребуется позже.

Ответы [ 3 ]

6 голосов
/ 16 ноября 2009

Вы можете установить общедоступные свойства записи в качестве псевдопараметров в конструкторе.

let contextMenu = new ContextMenuStrip()
let form = new Form(ContextMenuStrip = contextMenu)
6 голосов
/ 16 ноября 2009

Я не рекомендую вам писать это в одной строке, потому что это означает, что это будет смесь между #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

Я хотел бы добавить, что выражения последовательного выполнения не имеют ничего общего с режимом без подсветки. Это просто общая языковая конструкция.

Надеюсь, это поможет.

5 голосов
/ 16 ноября 2009

Вы также можете набрать

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

Это синтаксис OCaml, IIRC.

Редактировать: чтобы быть более понятным: это также допустимый (#light) синтаксис F #, поскольку F # основан на OCaml.

Я также не рекомендую делать это, хотя мне нравятся короткие программы.

...