Вопрос по lambda, f#, function, func – Преобразование лямбда-выражений в Func

2

Учитывая следующее:

open System.Linq

let seqA = { 1..10 }

это работает:

seqA.All (fun n -> n > 0)

Однако это не так:

let abc = fun n -> n > 0

seqA.All (abc)

Почему F # предлагает неявное преобразование из лямбда-выражений вFuncс, но не из функций? Приветствуются указатели на документацию, где я могу прочитать о том, что здесь происходит. :-)

Ваш Ответ

1   ответ
4

Разрешение метода и снова вТип-ориентированные преобразования при вызовах участников, Цитирую последнее:

Как описано вРазрешение приложения метода (см. §14.4), при вызове метода применяются два преобразования типа.

Первое преобразование с указанием типов преобразует выражения анонимных функций и другие аргументы с функциональными значениями в типы делегатов. Дано:

Формальный параметр типа делегатаDФактический аргументFarg известного типати1 -> ... -> тыn -> ртыТочноn аргументы кInvoke метод типа делегатаD

Затем:

Параметр интерпретируется так, как если бы он был написан:
new D(fun Arg1 ... аргn -> Фарг Арг1 ... аргn)

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

Даниэль, проверьэто из, Передача функций F #немного из методов действительно работает. dharmatech
Конечно. Я только что понял, что остановился на последней части. Это фиксированная. Daniel
Спасибо, Даниэль! dharmatech

Похожие вопросы