gpt4 book ai didi

types - ocaml 类型内的类型

转载 作者:行者123 更新时间:2023-12-04 17:37:36 26 4
gpt4 key购买 nike

如果我在模块状态中有一个类型

type state = {x: int; y: int}

我在模块游戏中有另一种类型
type game = State.state

如何访问具有游戏类型的对象中的记录值?

例如,如果我有一个游戏“g”,g.x 会给我一个“未绑定(bind)记录字段标签 x”错误。

最佳答案

字段名称位于 State模块命名空间。你可以说g.State.x ,或者您可以打开State模块。

let f g = g.State.x

或者:
open State

let f g = g.x

如果您希望字段显示在 Game模块命名空间,你可以重复它们:
type game = State.state = {x: int; y: int}

您也可以使用 include设施包括 State模块。

例如,您的 Game模块可以说:
include State
type game = state

以上任一情况,均可引用 Game.x :
let f g = g.Game.x

或者:
open Game
let f g = g.x

也有两种表示法可以为一个表达式打开一个模块:
let f g = Game.(g.x)

或者:
let f g = let open Game in g.x

编辑:这是一个 Unix 命令行 session ,它显示了第一个(最简单的)解决方案:
$ cat state.ml
type state = { x: int; y : int }
$ cat game.ml
type game = State.state
$ cat test.ml
let f (g: Game.game) = g.State.x

let () = Printf.printf "%d\n" (f { State.x = 3; y = 4})
$ ocamlc -o test state.ml game.ml test.ml
$ ./test
3

关于types - ocaml 类型内的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13557709/

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