如何在 Ocaml 中使用类中定义的类型作为 val?

Posted

技术标签:

【中文标题】如何在 Ocaml 中使用类中定义的类型作为 val?【英文标题】:How to use a defined type inside a class as a val in Ocaml? 【发布时间】:2019-05-28 20:56:04 【问题描述】:

我正在编写一个存储定义类型数组的类。我的代码语法有问题-我认为。我想在数组中获得一个定义的类型,但我的代码一直出错。

我已经创建了一个类,写下我需要的数组。我已经尝试过以这些方式编写它;


[|(Rook, Black, (Alive of (A, 1)))]
[|(Rook, Black, (Alive of A, 1))]
[|(Rook, Black, Alive of (A,1))]
[|(Rook, Black, Alive of A,1)]
[|(Rook, Black, (A,1))

但遗憾的是,它将我的数组显示为chess_piece * chess_colour * (chess_letter * int),否则会出现操作错误。

这是我定义的类型

type chess_letter = A | B | C | D | E | F | G | H
and chess_piece = King | Queen | Rook | Bishop | Knight | Pawn
and chess_colour = Black | White 
and chess_position = Alive of chess_letter * int | Dead

数组应包含[|(chess_piece, chess_colour, chess_position)|]

【问题讨论】:

这不是 OOP,所以我删除了标签。您发布的代码中没有类或对象。 【参考方案1】:

构造变量Alive的值的语法是:

Alive (A, 1)

of 仅用于类型定义。并且无论是在数组内部还是外部都没有区别。

此外,您的数组在语法上都不正确。前四个在终止] 之前缺少|,最后一个都缺少。

【讨论】:

以上是关于如何在 Ocaml 中使用类中定义的类型作为 val?的主要内容,如果未能解决你的问题,请参考以下文章

如何在ocaml中将字符串转换为整数列表?

OCaml 用户定义类型和函数返回错误

Ocaml:在参数类型中使用记录和变体

Ocaml 类型不匹配?预期单位,但为已定义类型

在 OCaml 中导入和解析日历

在OCaml中忽略关于=的某些类型