Передавать функции в F#
-
09-06-2019 - |
Вопрос
Можно ли передать ссылку на функцию другой функции в F #?В частности, я бы хотел передать лямбда-функции, такие как
foo(весело x -> x ** 3)
Более конкретно, мне нужно знать, как я буду ссылаться на переданную функцию в функции, которую я написал сам.
Решение
Да, это возможно.Тот Самый руководство пользователя есть такой пример:
> List.map (fun x -> x % 2 = 0) [1 .. 5];;
val it : bool list
= [false; true; false; true; false]
Другие советы
Функции являются гражданами первого класса в F #.Поэтому вы можете передавать их по кругу так, как вам хочется.
Если у вас есть такая функция, как эта:
let myFunction f =
f 1 2 3
и f является ли функция тогда возвращаемым значением Моя функция является f применяется к 1,2 и 3.
Передача лямбда-функции другой функции работает следующим образом:
Предположим, у нас есть наша собственная тривиальная функция следующего вида:
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]