我可以看到人们在对象表达式中使用lambdas,例如在this post中,但我无法弄清楚为什么以下想法不起作用。
type fooType = {flar : string; grib: int}
let boundFoo = {flar = "hello"; grib = 1}
let flack = {boundFoo with grib = fun () -> if boundFoo.flar = "hello" then 5 else 4}
从我可以收集到的内容来看,它不像fun () ->
,但fun _ ->
和fun x ->
似乎不会带来任何不同的结果?
到目前为止,我在通常的地点[{3}},MSDN和F# for fun and profit对此进行的研究并未导致我走上任何明确的道路。
我在这里缺少什么?
答案 0 :(得分:3)
在您的代码grib
中是一个int。 fun () -> ...
不是int,它是一个函数。因此,fun () -> ...
不是字段grib
的有效值。
如果grib
的类型为() -> int
,那么您的代码就可以使用(除非您必须将前一行的grib = 1
更改为grib = fun () -> 1
当然),但这在这里做起来并不是一件有用的事情。真的,这似乎不是一个功能非常合适。这样可以正常工作:
let flack = {boundFoo with grib = if boundFoo.flar = "hello" then 5 else 4}