【问题标题】:Parameterless lambda expressions in F#F# 中的无参数 lambda 表达式
【发布时间】:2014-06-26 19:03:52
【问题描述】:

我正在寻找一种在 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 不谈论这个。我在这里错过了什么?

【问题讨论】:

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


    【解决方案1】:

    只是

    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) - 这将包括 unit()unit 类型的唯一值(或多或少来自 C# 的 void ......但在 F# 中是真正的类型)

    【讨论】:

      猜你喜欢
      • 2011-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多