将自定义类型强制转换为"option"自定义类型



我是Ocaml和函数式编程的新手,我正在尝试实现一些尊重某些组件接口的数据结构。目前我的问题是以下错误

File "src/symbol_table.ml", line 24, characters 39-45:
24 |   { variables=Hashtbl.create 0; parent=Option(table) }
^^^^^^
Error: This variant expression is expected to have type dec option
The constructor Option does not belong to type option
Command exited with code 2.

我正在尝试实现以下接口

type dec
val begin_block : dec -> dec

通过以下实施

type dec = {
variables: (Ast.identifier, Ast.typ) Hashtbl.t;
parent: dec option
}
let begin_block (table: dec) =
logger#debug "Starting scope";
{ variables=Hashtbl.create 0; parent=table }

我认为我的Java知识是这里的极限,我的问题是如何使强制转换为类型dec选项?将表设置为父表?

OCaml中的option是一种变体,它可以包含以下两种内容之一:

  • 表示有内容的值以及该值是什么,标注为Some(value)
  • 表示没有内容的值,标注为None

因此,dec option是一种可以保存dec值的选项类型。要么它有一个使用Some的值,要么它没有使用None的值。

要回答您的问题,您需要将parent=table替换为parent=Some(table)

如果你想表明没有父母,你会有parent=None

我强烈建议您阅读OCaml中的变体和Option,因为它们是该语言非常有用的强大功能。

这里有更多关于Option是什么的解释

最新更新