gpt4 book ai didi

ocaml - 未绑定(bind)构造函数错误

转载 作者:行者123 更新时间:2023-12-02 02:42:07 26 4
gpt4 key购买 nike

据我了解,模块接口(interface)/签名就像Java中的接口(interface)。我有点明白为什么会收到未绑定(bind)构造函数错误,但我不知道该怎么办。

我有一个 trie 模块,这是 trie.mli 文件的一部分:

type ('k, 'v) trie

val empty : ('k, 'v) trie

val is_empty : ('k, 'v) trie -> bool

这来自 test.ml 文件:

open OUnit

open Trie

let t () =

assert_equal (is_empty (Trie(None,[]))) true;

assert_equal (is_empty (Trie(Some 7,[]))) true

这来自 trie.ml 文件:

type ('k, 'v) trie = Trie of 'v option * (('k * ('k, 'v) trie) list)

未绑定(bind)构造函数错误来自 test.ml 文件。所以我的理解是,该接口(interface)仅提供抽象模块定义,因此我无法使用 .ml 文件中的构造函数。所以我不确定如何去测试我的实现。我会创建一个名为 create 的新函数吗?

最佳答案

您可以查看类似 https://github.com/janestreet/ppx_inline_test 的测试库和 http://batteries.vhugot.com/qtest/Trie 模块中内联编写测试,其中类型不是抽象的。否则,是的,您将必须提供一些函数来准确构造您想要的尝试,仅在测试期间使用,或者使类型在接口(interface)中具体化。您也许还可以使用 trie 遍历函数来测试您的尝试,而不是在测试期间手动构建示例尝试。

还有一种复杂的方法,通过定义一些模块 The_real_trie 来为测试代码和公共(public)提供 Trie 模块的两个不同 View ,而不是限制它带有签名(例如 mli 文件),针对该模块编写测试,然后在 trie.ml 中简单地执行 include The_real_trie 操作。 Trie 将完全是 The_real_trie,但受到 trie.mli 中的signatrue 约束,因此类型为 Abstract。

关于ocaml - 未绑定(bind)构造函数错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35211583/

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