gpt4 book ai didi

types - OCaml 在不相交的联合中有记录语法吗?

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

我可以像这样编写标准的不相交联合:

type test = A of int * int | B of int * int;;

然而,随着类型变得越来越复杂,访问特定字段或跟踪每个字段代表的内容变得越来越痛苦。 Haskell 用 record syntax 解决了这个问题.也就是说,能够执行以下操作会很好:

type test = A of {x:int * y:int} | B of {x:int * y:int};;

我不容易找到这样的东西,但 OCaml 文档总体上看起来有点参差不齐,所以它很可能存在。有什么建议吗?

编辑:我知道不相交的联合和记录语法,我只是希望在组合它们时有好的语法。

最佳答案

不幸的是,您不能将记录字段放在变体构造函数声明的参数中。您必须单独定义它:

type xy = { x : int; y : int }
type test = A of xy | B of xy

这会稍微降低内存效率,因为您需要另一个内存块用于 xy。如果通过记录大大提高可读性,我个人并不介意。

但是,我记得有一个提案和一个补丁,就像您写的那样,将记录字段作为变体构造函数:

type test = A of { x : int; y : int } | B of { x : int; y : int }

不需要额外的 block 。但它不在 OCaml 4.01.0 中,我不确定在未来的 OCaml 版本中是否可以使用此扩展。欢迎进一步评论。

关于types - OCaml 在不相交的联合中有记录语法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22367396/

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