如何解决如何在与 C# 类中的委托等效的 F# 类型中创建委托?
我正在为 Godot 中的游戏编写代码,并且使用 F# 作为我的编程语言。我有点推动边界,因为它们仍然处于对 C# 的后期 alpha 支持。找到将模式从 C# 转换为 F# 的问题的解决方案并不总是那么容易。我在声明我的委托时遇到了一个问题,Godot 编辑器会识别我的委托 Signal
。在我看来,这与 x-y 问题接近,但我在 Godot 系统的约束下工作。
我希望能够声明该类的 F# 等效项。这里的关键是 [Signal]
函数注释告诉编辑器该委托可以用作其观察者模式中的信号。在类中声明委托也会将该委托的范围锁定到该类。只有那个班级会发出那个信号。
using Godot;
public class GodotNode : Node
{
[Signal]
public delegate void MyDelegate();
public void SendSignal
{
EmitSignal(nameof(MyDelegate));
}
}
我已经尽力尝试在 F# 中重新创建它,但我真的不知道如何将委托嵌套在另一种类型中。从我所看到的一切来看,这并不完全可能,但我想知道是否还有其他我可以做的事情。
open Godot
(* This is the closest I have been able to get to. *)
[<Signal>]
type MyDelegateSignal = delegate of Unit -> Unit
type GodotNodeFs()
inherit Node
(* But I need the equivalent of this
[<Signal>]
type MyDelegateSignal = delegate of Unit -> Unit *)
member this.SendSignal =
this.EmitSignal(nameof MyDelegate)
最坏的情况,我知道我至少可以通过将其推回 C# 代码来使其工作。目前在 Godot 中,每个类都需要使用 C#。因此,所有 F# 类都由 C# 包装类继承。
public class GodotNode : GodotNodeFs
{ // ... put signals and emitters in base class
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。