Вопрос

Можно ли передать ссылку на функцию другой функции в 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]
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top