调用方法/属性快捷方式

时间:2015-12-11 18:41:01

标签: f#

有更短的方法吗?

Seq.map (fun x -> x.SomeFunction()) xs
Seq.map (fun x -> x.SomeProperty) xs

这显然不起作用

Seq.map SomeFunction() xs
Seq.map SomeProperty xs

这会更简单地允许这样的事情

Seq.map (SomeProperty >> fn1 >> fn2) xs

我在这里使用Seq.map,但没有什么特别之处。还有许多其他功能,这将是很好的。我花了一些时间来看看我是否错过了某些语法糖,但没有运气。

1 个答案:

答案 0 :(得分:4)

目前没有将属性或方法转换为函数的语法,但它是a popular feature request。随意在那里添加你的投票。

您可以做的最接近的事情是使用静态成员约束定义一个函数,该约束允许您调用特定名称的方法并键入:

例如,要拨打Next : unit -> 'R,您可以使用:

let inline next (value:^T) : 'R = 
  (^T : (member Next : unit -> 'R) value)

现在你可以写

[ new System.Random() ] |> List.map next

这不是非常有用(除非你需要经常为特定的方法或属性执行此操作),所以我的偏好是只使用显式函数。