我想用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())