对象表达式中的F#Lambda

时间:2014-09-16 02:32:05

标签: lambda f#

我可以看到人们在对象表达式中使用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}},MSDNF# for fun and profit对此进行的研究并未导致我走上任何明确的道路。

我在这里缺少什么?

1 个答案:

答案 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}