OCaml - 什么数据类型是一些,没有?

Gas*_*sim 7 ocaml types

如果我在列表中使用SomeNone组合什么是列表的数据类型?它总是'a吗?或者是某种类型的Some/ None

let listVar : (* type here *) list = [Some 4; Some 3; None; Some 2];;
Run Code Online (Sandbox Code Playgroud)

如果我把int它给我错误:

此表达式具有int选项*int option*'a option*int选项,但此处与int类型一起使用

当我把'a它编译得很好但基本的OCaml教程说(我引用其他语言来更好地解释我的问题):

目前尚不清楚为什么多态函数是有用的,但它们非常有用且非常常见,因此我们稍后将讨论它们. (提示:多态性有点像C++中的模板或Java 1.5中的泛型).

我认为这就像其他语言中的引用/指针一样,实际上是有道理的.但现在,我真的不明白是什么类型None.同样如此Some.

另外,我知道我应该在一个问题中提出两个问题,但这个问题与前一个问题有很强的关系.有些人有什么意义?我经常看到在使用None时使用它.如果我实现上面的列表没有Some,它仍然编译,但列表结构没有"选项"标志,我猜这意味着可选(我似乎无法在互联网上找到任何关于这个).有人能为我提供一个有用的案例吗?

Dan*_*zli 9

你在这里写的是一个类型的值(int option * int option * 'a option * int option) list,即一个四元组的列表,其中前两个组件是可选的整数,下一个到目前为止是多态的(有些情况尚未定义),最后一个是可选的整数.这是因为,是元组分隔符.列表分隔符是;我猜你想写的

let listVar = [Some 4; Some 3; None; Some 2];;
Run Code Online (Sandbox Code Playgroud)

哪种类型(int option) list.无论何时使用SomeNone使用任意类型的值,'a您都会得到一个类型的值'a option.


Jac*_*ale 6

它是选项类型,表明它是否具有某种价值。

如果您来自 Java 或 C# 或其他命令式编程,每当您想null在 Java 的方法中返回 a 时,在 OCaml 中,您应该考虑返回 aNone