编写F#Windows窗体应用程序我发现了F#的Event.Filter函数,我想了解更多相关信息。 我所做的就是转换我现有的代码:
MyControl.MouseMove.Add( fun args ->
if (args.Button = MouseButton.Left && args.X > 10 && args.Y > 10)
then // do something
到:
MyControl.MouseMove
|> Event.filter ( fun args ->
(args.Button = MouseButtons.Left && args.X > 10 && args.Y > 10))
|> Event.add ( // do something)
我发现Event.Filter解决方案非常优雅,所以我想知道它是否只是一种语法糖,或者它是如何在“引擎盖下”工作的区别。
答案 0 :(得分:2)
查看source,您可以看到您的两个代码示例几乎完全相同。唯一的额外开销是Event
创建额外的filter
。
在我看来,由于性能而未使用filter
将是一种过度优化。