c# - 如何将此 c# 代码移植到 f# 以处理 SFML 事件
问题描述
我正在尝试在 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())
推荐阅读
- asp.net-core - .Net 核心 2.1 身份 configureapplicationcookie 会话存储与 addsession/usesessions
- ionic-framework - 离子 4 CSS 变量
- php - PHP 注意:未定义的偏移量:0 使用数据行
- javascript - 更改 React 状态对象中的布尔属性
- html - Heroku vue-loader 构建失败
- filter - 按月计算的数据总和,同时可过滤
- twilio - Twilio API:无法在彩信中下载 jpeg 文件
- oracle-apex - 使用选中的复选框获取所选行的值
- firebase - Meteor 在服务器端加载 Firebase 管理员
- c# - C#对象名称概念解释