我正在寻找一种在F#中定义无参数lambda表达式的方法,就像下面的C#示例一样。
var task = () => {
int x = 3;
DoSomething(x);
}
我尝试了以下
let task = fun _ ->
let x = 3
doSomething x
它编译但它给了我task : ('a -> unit)
我真正想要的是task : (unit -> unit)
MSDN Documentation没有谈到这一点。我在这里缺少什么?
答案 0 :(得分:13)
它只是
let task = fun () -> // whatever you need
你的例子是:
let task = fun () ->
let x = 3
DoSomething(3)
假设DoSomething
的类型为int -> unit
- 如果它返回了您需要的其他内容
let task = fun () ->
let x = 3
DoSomething(3) |> ignore
获取类型unit -> unit
<强>注:强>
通常你不会写let task = fun () -> ...
而只是let task() = ...
你错过的东西:
如果你写fun _ -> ()
,你说你想要一些你不会想到的参数 - 所以F#将采用最一般的(在这里被命名为'a
) - 这将包括{{ 1}}!
unit
是类型()
的唯一值(C#中的unit
或多或少void
但是F#中的真实类型