2009-03-24 10 views

Répondre

4

cela a été discuté à plusieurs reprises sur le moyeu F #. Voir par exemple instance methods as functions. C'est un problème assez compliqué, donc il n'y a aucun plan pour avoir quelque chose comme ça dans la première version de F # autant que je sache, mais ce serait bien d'avoir quelque chose comme ça :-).

Une autre solution que vous pouvez faire est d'ajouter un membre statique comme une méthode d'extension en F #:

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

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

Mais c'est un peu laid. En outre, il semble que cela ne fonctionne que si vous utilisez un nom différent pour la méthode. Je suppose que F # ne vous permet pas de surcharger la méthode existante avec une méthode d'extension et préfère toujours la méthode intrinsèque.

0

Je ne sais pas si je vous exactement compris, mais pour cet exemple spécifique, vous pouvez écrire:

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

ou

let f = fun x -> x.ToString 
items |> Seq.filter my_predicate |> Seq.map f 
Questions connexes