我如何将这段c#代码移植到f#中来处理SFML事件?

问题描述 投票:0回答:1

我想用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();
        }
c# f# sfml
1个回答
1
投票

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())
© www.soinside.com 2019 - 2024. All rights reserved.