gpt4 book ai didi

ocaml - 在 OCaml 中管理动态依赖

转载 作者:行者123 更新时间:2023-12-01 11:38:09 25 4
gpt4 key购买 nike

想象一下 OCaml 中的一个库,它可能需要将其数据存储在某个地方。这个持久层可以用不同的库(sqlite、MySQL、PostgreSQL 等)来实现。并且根据存储的具体技术,它可能提供不同的特性和性能保证。

管理此类库的外部依赖项的可能方法有哪些?假设如果我使用 MySQL 进行开发,我不想在 sqlite 上引入编译时和运行时依赖性。

在 C++ 中,我可能会使用抽象接口(interface)并将具体逻辑放入有条件地包含在我的项目中的模块中(取决于配置开关)。我很好奇,怎么会有人在 OCaml 中处理相同的任务。

最佳答案

您可能会定义一个模块类型来抽象所有实现。例如

module type DB =
sig
type t
type results

val execute : t -> string -> results
...
end

然后您将编写代码以将此模块类型的实现作为参数:

 module MyProg (D : DB) = struct
let run db =
let r = D.execute db "SELECT ..." in
...
end

对于图书馆来说,这就是您所需要的。对于可执行程序,您需要一个单独的 main 函数来连接到一些实际的数据库,这可能是特定于 DB 的,但其余代码仅使用抽象的 DB

(当然,您会使用比这个基于字符串的 API 更好的 API。这只是一个简单的示例。)

关于ocaml - 在 OCaml 中管理动态依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25278412/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com