Преобразование System.Func‹› в FastFunc‹› в F#

При взаимодействии с библиотеками F# от IronPython кажется, что объект функции Python не преобразуется автоматически в стандартный объект функции F# FastFunc при передаче в интерфейс F#, принимающий функцию в качестве одного из параметров.

С другой стороны, объекты функций Python хорошо преобразуются в System.Func‹>, если интерфейс является одним из них. То есть это не так просто вызвать из python:

let myFunc (f: float->float) =
   f(3.5)

в то время как следующее работает отлично:

let myFunc2 (f: System.Func<float, float>) =
    f.Invoke(3.5)

Итак, мой вопрос: если я хочу иметь возможность легко передавать свои объекты функций Python F#-функций, есть ли способ преобразовать объект System.Func‹> в объект FastFunc (чтобы иметь тонкий интерфейс на IronPython/C# и т. д., но иметь возможность использовать предоставленную функцию как обычную функцию F# глубже в библиотеке)?

Спасибо, Рикард

ps У меня недостаточно представителей, чтобы создать новый тег, возможно, кто-то может создать тег FastFunc и пометить им этот вопрос, если вы сочтете это подходящим


person Rickard    schedule 02.01.2010    source источник


Ответы (1)


Здесь:

    In order to convert from the Func delegate to the FastFunc, we use the
 FuncConvertExtensions class in the FSharp.PowerPack.Linq.dll assembly. 

С этого сайта: http://codebetter.com/blogs/matthew.podwysocki/archive/2008/10/15/functional-c-implementing-async-computations-in-c.aspx

person Tony The Lion    schedule 02.01.2010