Given funkcja F # wyższego rzędu (biorąc funkcję w parametrze):Zadzwoń wyższego rzędu F # funkcji z C#
let ApplyOn2 (f:int->int) = f(2)
a funkcja C#
public static int Increment(int a) { return a++; }
Jak mogę zadzwonić ApplyOn2
z Increment
jako parametr (z C#)? Pamiętaj, że ApplyOn2
jest eksportowany jako Microsoft.FSharp.Core.FSharpFunc<int,int>
, który nie jest zgodny z podpisem Increment
.
Problem nie dotyczy zestawów referencyjnych. Problem polega na tym, że ApplyOn2 jest eksportowany jako Microsoft.FSharp.Core.FSharpFunc, które nie są zgodne z Inkrementacją. –
sthiers
Próbowałem go i działa: > ClassLibrary1.Class1.Increment ;; Sesja powiązania z 'J: \ Projects \ ClassLibrary1 \ ClassLibrary1 \ bin \ Debug \ ClassLibrary1.dll "... val it: int -> int = > let ApplyOn2 (f: int-> int) = f (2) ;; val ApplyOn2: (int -> int) -> int > ApplyOn2 ClassLibrary1.Class1.Increment ;; val it: int = 2 –
ssp
@ ssp: To jest przykład wywoływania C# z F #. F # jest znacznie bardziej wyrozumiały dla funkcji i delegowania konwersji typów, ale zwracasz uwagę na to, że wywołujesz F # z C#. –