函数定义语法

Function definition syntax

我正在尝试实现一个特定的算法。该算法没有很好地描述,但我确实有一个 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 对象和 returns s 字段,它是一个字符串。

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

提前致谢。

记录的问题在于它们的字段名称的范围在记录之外。因此,如果您有两条具有相同字段名称 a 的记录,它们就会发生冲突。也就是说,通常无法判断 x.a 是指一种记录类型还是另一种记录类型中的字段。根据 x 的类型,它可能是。

OCaml 试图通过推断记录类型(在本例中为 x)在这方面提供很大的灵活性。但如果无法推断,您需要指定您所谈论的类型。

作为旁注,@glennsl 是正确的。如果您有大量的 OCaml 需要弄清楚,并且您是从头开始学习 OCaml,那么从书本或在线教程中学习 OCaml 会比在 Whosebug 上提出个别问题更快。