如何将此 c# 代码移植到 f# 以处理 SFML 事件

How can I port this c# code to f# for handling SFML events

我正在尝试在 F# 中创建一个 SFML 应用程序,但由于没有相同的 f# 教程,我正在尝试从 c# 教程中学习。我根本不懂c#,只懂f#的基础。

我在 C# 中看到这段代码,但不确定等效的 F# 代码是什么。

   static void Main()
        {
            ...

            window.KeyPressed += new EventHandler<KeyEventArgs>(OnKeyPressed);

            ...

        }

        static void OnKeyPressed(object sender, KeyEventArgs e)
        {
            Window window = (Window)sender;
            if (e.Code == Keyboard.Key.Escape)
                window.Close();
        }

F# 将事件转换为 IEvent<TDelegate, TArgs>,它公开了 AddHandler 方法,以及 IObservable.Subscribe 方法。

您可以使用 AddHandler 添加委托,相当于 C# 中的 +=

window.KeyPress.AddHandler(fun sender evt -> printfn "Pressed %A" evt.Code)

如果要进行事件处理,最好将事件视为可观察的。

window.KeyPress |> Observable.op... |> Observable.subscribe(fun evt -> printfn "Pressed %A" evt.Code)

还有一个 Event 模块可让您编写事件。您当前的示例可以重写为:

window.KeyPress 
|> Event.filter(fun evt -> evt.Code = Keyboard.Key.Escape) 
|> Event.add (fun _ -> window.Close())