34

许多示例 Scala 代码包含名为“xs”的字符串和集合。为什么是xs?

例子:

var xs = List(1,2,3)
val xs = "abc"
4

4 回答 4

48

基本上它是一种源自 LISP 的命名约定。其背后的基本原理是:

  1. X 是一个常见的占位符名称。
  2. XS 发音为 X'es,即“许多 X”。
于 2010-10-14T22:24:32.433 回答
31

xs是 的复数x

于 2010-10-14T22:22:51.357 回答
17

除了@Ken Bloom指出xs的 x 的复数形式之外,还需要注意 Scala 等语言的结构。被构造为一个链表,其中容器引用了第一项和列表的其余部分。ListList

替代文字

::运算符(称为cons )将列表构造为:

42 :: 69 :: 613 :: Nil

::出现在模式匹配中时,还会将列表提取到第一项和列表的其余部分,如下所示:

List(42, 69, 613) match {
  case x :: xs => x
  case Nil => 0
}

由于这种模式无处不在,读者可以推断出这xs意味着“列表的其余部分”。

于 2010-10-14T22:37:30.610 回答
8

我在函数式编程教程中看到这个名称用于列表变量,但不是字符串(除非字符串被视为字符列表)。

它基本上是示例中使用的虚拟名称。你可以命名一个标量变量x,而一个列表是xs,因为xs是 的复数形式x。在生产代码中,最好有一个更具描述性的名称。

您可能还会在模式与列表匹配的代码中看到这一点。例如(在 OCaml 中):

let rec len l =
  match l with
  | [] -> 0
  | x :: xs -> 1 + len xs

一对更具描述性的名称可能是first :: rest,但这只是一个示例。

于 2010-10-14T22:23:36.303 回答