我正在寻找一种在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)
假设
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#中为真类型)关于f# - F#中的无参数Lambda表达式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24438213/