gpt4 book ai didi

types - 变体还是多态变体?

转载 作者:行者123 更新时间:2023-12-03 07:56:37 25 4
gpt4 key购买 nike

我注意到,在我认识的 OCaml 程序员中,他们中的一些人总是使用多态变体(未声明的变体,以反引号为前缀),而其他人从不使用多态变体,并且更喜欢在类型中声明的变体。

除了性能原因(目前多态变体的编译效率低于简单变体),OCaml 专家开发人员如何在它们之间进行选择?

最佳答案

我的用法可以分为以下5类。 1. 界面 2. 模块化 3. 易读性 4. 简洁 5. 技巧

  • 如果变体类型仅在模块内部,我使用常规变体,因为正如您所说,它们的编译效率更高。
  • 如果在接口(interface)中导出了变体类型,并且我觉得某些情况可能会出现在其他模块中,但让它们依赖于模块并不一定有意义,我使用多态变体,因为它们不绑定(bind)到模块命名空间系统.示例:encoding type Xmlm 的类型.还有signal type作为变体类型意味着您可以使用相同的 XML 处理思想开发模块,而不会引入对 Xmlm 的依赖。 .
  • 如果在接口(interface)中导出变体类型,我发现当将变体类型的值赋予模块的函数时,使用常规变体有时过于冗长。示例:version typeUuidm .不必写 Uuidm.create Uuidm.V4你可以简单地写Uuidm.create `V4 ,这同样清晰且不那么冗长。
  • 有时一个特定的函数可能会返回不同的情况。如果这些情况仅由该函数使用,我在接口(interface)中声明函数类型,而无需引入类型定义。例如 parse : string -> [`Error of string | `Ok of t]
  • 多态变体及其子类型允许您使用幻像类型静态地强制执行不变量。除了以增量方式定义它们的可能性之外,对于静态执行不变量和出于文档目的而言,它们也是有用的。

  • 最后,我有时会根据 4. 在模块的实现中使用多态变体,但它们不会出现在界面中。我不鼓励这种用法,除非您声明多态变体并关闭它们,因为它会削弱静态类型规则。

    关于types - 变体还是多态变体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9367181/

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