2008-09-04 5 views
6

Можно ли передать ссылку на функцию другой функции в F #? В частности, я хотел бы передать лямбда-функции, такие какФункции пропуска в F #

Foo (весело х -> х ** 3)

Более конкретно, мне нужно знать, как я хотел бы сослаться на переданную функцию в функцию, что я писал сам.

ответ

4

Да, это возможно. manual имеет следующий пример:

> List.map (fun x -> x % 2 = 0) [1 .. 5];; 

val it : bool list 
= [false; true; false; true; false] 
2

Функции являются гражданами первого класса в F #. Поэтому вы можете передавать их так же, как хотите.

Если у вас есть функция, как это:

let myFunction f = 
    f 1 2 3 

и е является функцией, то возвращаемое значение MYFUNCTION является е применяется к 1,2 и 3.

+0

что, если вы хотите две функции в качестве входных данных для MYFUNCTION? – Nulle 2016-10-13 12:19:43

2

Passing лямбда-функция для другой функции работает следующим образом:

Предположим, что у нас есть тривиальная функция:

let functionThatTakesaFunctionAndAList f l = List.map f l 

Теперь вы можете передать функцию лямбда и список к нему:

functionThatTakesaFunctionAndAList (fun x -> x ** 3.0) [1.0;2.0;3.0] 

Внутри нашей функции functionThatTakesaFunctionAndAList вы можете просто сослаться на лямбда-функции, как f потому, что вы назвали ваш первый параметр f.

В результате вызова функции, конечно:

float list = [1.0; 8.0; 27.0] 

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

  • Нет связанных вопросов^_^