如何在 OCaml 中进行函数覆盖?
How to do function override in OCaml?
我已经阅读了有关模块的整个章节book,但有些地方我不明白。
假设我有一个签名和该签名的实现:
module type X = sig
val x : int
val y : int
end
module X1 : X = struct
let x = 5;
let y = 6;
end
那么假设我有一个仿函数,它的参数是这个签名:
module IncX (M: X) = struct
let x = M.x + 1
end
如果我想使用已经定义的 X1
模块实例化 IncX
但覆盖 y
函数怎么办?
我想做这样的事情:
module X1_Specialized : X = struct
//how use x from X1 module here?
let y = 10;
end
OOP 语言中的模拟是覆盖一个函数。
你要求的通常叫做实现继承。并且没有必要为此使用仿函数,只需 include:
module X1_Specialized : X = struct
include X1
let y = 10
end
include
将包含 X1
的全部内容,就好像您在 include
的位置写下了它的定义一样。这包括 y
的定义,但下面的 y
定义将隐藏它,并实质上取代它。
另请注意,OCaml 不使用分号作为语句终止符。这些是您的代码中的语法错误。
我已经阅读了有关模块的整个章节book,但有些地方我不明白。
假设我有一个签名和该签名的实现:
module type X = sig
val x : int
val y : int
end
module X1 : X = struct
let x = 5;
let y = 6;
end
那么假设我有一个仿函数,它的参数是这个签名:
module IncX (M: X) = struct
let x = M.x + 1
end
如果我想使用已经定义的 X1
模块实例化 IncX
但覆盖 y
函数怎么办?
我想做这样的事情:
module X1_Specialized : X = struct
//how use x from X1 module here?
let y = 10;
end
OOP 语言中的模拟是覆盖一个函数。
你要求的通常叫做实现继承。并且没有必要为此使用仿函数,只需 include:
module X1_Specialized : X = struct
include X1
let y = 10
end
include
将包含 X1
的全部内容,就好像您在 include
的位置写下了它的定义一样。这包括 y
的定义,但下面的 y
定义将隐藏它,并实质上取代它。
另请注意,OCaml 不使用分号作为语句终止符。这些是您的代码中的语法错误。