我正在寻找一种在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没有谈论这个。我在这里想念什么?

最佳答案

只是

let task = fun () -> // whatever you need

您的示例将是:
let task = fun () ->
              let x = 3
              DoSomething(3)

假设DoSomethingint -> unit类型-如果返回其他内容,则需要
let task = fun () ->
              let x = 3
              DoSomething(3) |> ignore

获得unit -> unit类型

备注:
通常您不写let task = fun () -> ...而是let task() = ...
您错过的东西:
如果您编写fun _ -> (),则是说您想使用一些您不介意的参数-因此F#将采用最通用的参数(此处命名为'a)-其中将包括unit!()unit类型的唯一值(来自C#的void或多或少,但F#中为真类型)

关于f# - F#中的无参数Lambda表达式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24438213/

10-17 02:14