如何将此 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())
我正在尝试在 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())