Object 是否有人支持;“挂钩”;用OCaml?

Object 是否有人支持;“挂钩”;用OCaml?,object,hook,ocaml,Object,Hook,Ocaml,我 “我注意到xxxx中的程序员倾向于过度使用继承, 可能是因为这是唯一合理的扩展代码的方法 一种更好、更通用的扩展代码的方法是 通常使用钩子(参考Apache的模块API,[参考Drupal I 添加]。” 已经查找了一段时间,没有看到“hook”一词在OCaml文档的其他地方重复出现 OCaml中是否有对此的语言支持?给我指出正确的方向。我想要某种类型的现存类(所有实例)管理和回调,或者甚至不需要,模块是否能够以某种方式实现钩子 谢谢 我认为这是教程作者的个人观点。挂钩不是OCaml对象设计

“我注意到xxxx中的程序员倾向于过度使用继承, 可能是因为这是唯一合理的扩展代码的方法 一种更好、更通用的扩展代码的方法是 通常使用钩子(参考Apache的模块API,[参考Drupal I 添加]。”

已经查找了一段时间,没有看到“hook”一词在OCaml文档的其他地方重复出现

OCaml中是否有对此的语言支持?给我指出正确的方向。我想要某种类型的现存类(所有实例)管理和回调,或者甚至不需要,模块是否能够以某种方式实现钩子


谢谢

我认为这是教程作者的个人观点。挂钩不是OCaml对象设计的一部分。(依我个人的观点,钩子比继承要糟糕得多。)

书中对钩子的描述是:

通常,钩子函数是Apache在处理请求期间的某个时间点调用的函数。模块可以提供被调用的函数,并指定与其他模块相比它们何时被调用

更一般的术语是回调函数;像C#这样的语言有一种特殊的回调对象,称为委托,因为它们在语言中不将函数视为(好的)一等公民。 在函数语言(如OCaml)中,函数与其他值没有区别,因此您可以像传递任何整数值一样传递它们,而无需指针等。这使得用这些语言编写回调函数变得如此自然,以至于他们的程序员甚至不需要一个别致的名字

事实上,OCaml的标准库有许多高阶函数,它们将其他函数作为参数。以下是一个例子:

List.iter print_endline ["higher"; "order"; "function"]
List.iter
函数将
print\u endline
函数作为“回调”参数,并将其应用于第二个参数(字符串列表)的每个元素。由于OCaml允许函数产生副作用,您甚至可以向
List.iter
提供一个函数来修改程序中其他地方的一些引用。

这里的“hook”似乎有很多不同的潜在定义。