有没有办法“生成”这样的功能:
fun x -> x.ToString
我希望能够将实例方法转换为静态方法,将“this”作为参数,如下所示:
items |> Seq.filter my_predicate |> Seq.map Object.ToString
答案 0 :(得分:4)
这已在F#中心多次讨论过。请参阅示例instance methods as functions。这是一个非常棘手的问题,所以据我所知,在F#的第一个版本中没有计划这样的东西,但最终有这样的东西会很棒: - )。
您可以做的另一种解决方法是在F#中添加静态成员作为扩展方法:
type System.Object with
static member ObjToString(o:obj) = o.ToString()
open System
[ 1 .. 10 ] |> Seq.map Object.ObjToString;;
但这有点难看。此外,似乎只有在为方法使用不同的名称时才有效。我猜F#不允许您使用扩展方法重载现有方法,并且总是更喜欢内在方法。
答案 1 :(得分:1)
我不知道我是否完全理解你,但是对于这个具体的例子你可以写:
items |> Seq.filter my_predicate |> Seq.map (fun x -> x.ToString)
或
let f = fun x -> x.ToString
items |> Seq.filter my_predicate |> Seq.map f