在F#中调用对象的方法的简写

时间:2009-03-24 13:58:35

标签: f#

有没有办法“生成”这样的功能:

fun x -> x.ToString

我希望能够将实例方法转换为静态方法,将“this”作为参数,如下所示:

items |> Seq.filter my_predicate |> Seq.map Object.ToString

2 个答案:

答案 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