2014-06-26 2 views
2

Я ищу способ определения Параметрических лямбда-выражений в F #, как и следующий пример C#.Параметрические лямбда-выражения в F #

var task =() => { 
        int x = 3; 
        DoSomething(x); 
       } 

Я попробовал следующее

let task = fun _ -> 
       let x = 3 
       doSomething x 

Он компилирует, но это дает мне task : ('a -> unit) то, что я на самом деле ищет является task : (unit -> unit)

MSDN Documentation не говорить об этом. Что мне здесь не хватает?

ответ

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) - это будет включать unit! () - единственное значение типа unit (более или менее void от C# ... но настоящий тип в F #)

Смежные вопросы