函数定义语法



我正在尝试实现一个特定的算法。该算法没有很好地描述,但我确实有一个OCaml实现。问题是我不知道OCaml,而且我觉得语法很奇怪。这是许多问题中的第一个。对术语中的任何错误表示歉意。

我有一部分代码看起来像这个

type alternative_text = string
type indent = int
module Line =
struct
type t = {s:alternative_text; i:indent}
let make s i = {s;i}
let text (l:t): alternative_text = l.s
let length l = String.length l.s
let indent l = l.i
end

我的问题涉及线路let text (l:t): alternative_text = l.s。我想我知道这是什么,一个函数Line.text,它接受一个Line.t对象并返回s字段,这是一个字符串。

我的问题涉及(l:t): alternative_text语法。这看起来像是在指定参数和函数结果的类型,但为什么有必要呢?据我所知,let text l = l.s会做完全相同的事情,并且其他函数都是在不使用这种额外语法的情况下定义的。那么,为什么要在这里使用它呢?

提前谢谢。

记录的问题是它们的字段名的作用域在记录之外。因此,如果您有两个字段名为a的记录,它们将发生冲突。也就是说,通常不可能判断x.a是指一种记录类型中的字段还是指另一种记录类别中的字段。根据x的类型,它可以是任意一种。

OCaml试图通过推断记录类型(在本例中为x(来在这一领域提供很大的灵活性。但如果无法推断,则需要指定您所说的类型。

顺便说一句,@glensl是正确的。如果你有大量的OCaml需要弄清楚,并且你正在从头开始学习OCaml,那么从书或在线教程中学习OCaml将比在StackOverflow上提出单独的问题更快。

最新更新