2009-03-24 10 views

Antwort

4

dies mehrmals auf der F # Nabe diskutiert wurde. Siehe zum Beispiel instance methods as functions. Das ist ein ziemlich kniffliges Problem, also gibt es keine Pläne, so etwas in der ersten Version von F # zu haben, soweit ich weiß, aber es wäre großartig, so etwas zu haben :-).

Eine andere Lösung, die Sie tun können, ist statisches Element als eine Erweiterungsmethode in F # hinzuzufügen:

type System.Object with 
    static member ObjToString(o:obj) = o.ToString() 

open System 
[ 1 .. 10 ] |> Seq.map Object.ObjToString;; 

Aber das ist ein bisschen hässlich. Es scheint auch, dass dies nur funktioniert, wenn Sie einen anderen Namen für die Methode verwenden. Ich nehme an, dass F # nicht erlaubt, bestehende Methoden mit einer Erweiterungsmethode zu überladen und immer die intrinsische Methode zu bevorzugen.

0

ich weiß nicht, ob ich Ihnen genau verstanden, aber für dieses spezielle Beispiel könnten Sie schreiben:

items |> Seq.filter my_predicate |> Seq.map (fun x -> x.ToString) 

oder

let f = fun x -> x.ToString 
items |> Seq.filter my_predicate |> Seq.map f 
Verwandte Themen