【发布时间】:2009-03-24 13:58:35
【问题描述】:
有没有办法“生成”这样的函数:
fun x -> x.ToString
我希望能够将实例方法转换为以“this”为参数的静态方法,如下所示:
items |> Seq.filter my_predicate |> Seq.map Object.ToString
【问题讨论】:
标签: f#
有没有办法“生成”这样的函数:
fun x -> x.ToString
我希望能够将实例方法转换为以“this”为参数的静态方法,如下所示:
items |> Seq.filter my_predicate |> Seq.map Object.ToString
【问题讨论】:
标签: f#
这已在 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# 不允许您使用扩展方法重载现有方法,并且总是更喜欢内部方法。
【讨论】:
我不知道我是否完全理解你,但对于这个具体的例子你可以写:
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
【讨论】: