在 C# 中,可以用相当简洁的语法构造对象树:
var button = new Button() { Content = "Foo" };
在 F# 中是否有一种惯用的方式来做类似的事情?
记录有很好的语法:
let button = { Content = "Foo" }
据我所知,对象构造似乎是另一回事。通常我会编写如下代码:
let button = new Button()
button.Content <- "Foo"
甚至:
let button =
let x = new Button()
x.Content <- "Foo"
x
解决该问题的一种方法是使用自定义流式组合运算符:
// Helper that makes fluent-style possible
let inline (.&) (value : 'T) (init: 'T -> unit) : 'T =
init value
value
let button = new Button() .& (fun x -> x.Content <- "Foo")
是否有内置语法来实现这一点 - 或其他推荐的方法?