我正在尝试编写类类型,并且有一个表达我想要的问题。
我有
class type event_emitter = object
method on : string -> unit
end
然后我想这样做:
class type socket = object
inherit event_emitter
method on : int -> unit
end
但是我收到关于两者之间类型签名不匹配的编译器错误。我也尝试使用virtual
关键字,执行class type virtual event_emitter = method virtual on : string -> unit
,但这也不起作用,因为我猜这些是类类型定义,而不是实现。
我真的希望这种方法覆盖工作,这似乎很简单,不知道为什么不允许。
答案 0 :(得分:2)
您要做的是重载,而不是覆盖。您正尝试在socket
中创建一个与event_emitter
中名称相同但具有不同类型的新方法。覆盖将创建具有相同名称和类型的新方法。此描述也适用于其他语言,如Java和C ++。不同之处在于我不相信OCaml允许这种重载 - 与常规函数相同。
请注意,如果您输入了类似的Java声明,它将起作用,但socket
将有两个on
方法,而不是一个。 OCaml不允许这样做。
答案 1 :(得分:2)
这与antron的答案并不矛盾,但你可以这样做:
class type ['a] event_emitter = object
method on : 'a -> unit
end
class type socket = object
inherit [int] event_emitter
end