F#中无参数的lambda表达式

时间:2014-06-26 19:03:53

标签: f# c#-to-f# unit-type

我正在寻找一种在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没有谈到这一点。我在这里缺少什么?

1 个答案:

答案 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#中的真实类型