为什么List和String标识符名为"xs"(在Scala和其他语言中)?

Adr*_*ian 33 scala naming-conventions identifier

许多示例Scala代码包含名为"xs"的字符串和集合.为什么选择xs?

例子:

var xs = List(1,2,3)
val xs = "abc"
Run Code Online (Sandbox Code Playgroud)

kei*_*ter 43

基本上它是起源于LISP的命名约定.其背后的理由是:

  1. X是常见的占位符名称.
  2. XS发音为X',即"很多X".

  • 该惯例实际上扩展到多维结构.例如,xss可以是列表列表,xss可以是数组阵列的数组. (4认同)
  • 为什么不使用正确且有意义的名称呢? (2认同)

Ken*_*oom 29

xs是复数x.

  • @Paul - 不,只有当你有12个xs时才有效 (3认同)

Eug*_*ota 16

除了@Ken Bloom指出xs的x的复数这个事实之外,它还与注意像Scala结构的语言有关.结构化为链接列表,其中容器具有对第一个项目和列表其余部分的引用.ListList

替代文字

::运营商(称为缺点)建设名单如下:

42 :: 69 :: 613 :: Nil
Run Code Online (Sandbox Code Playgroud)

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

List(42, 69, 613) match {
  case x :: xs => x
  case Nil => 0
}
Run Code Online (Sandbox Code Playgroud)

由于这种模式出现在任何地方,读者可以推断出这xs意味着"列表的其余部分".

  • 我在心理上将"xs"称为"过剩",就像"其余"一样. (7认同)

Jay*_*rod 8

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

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

您可能还会在代码中看到此模式与列表匹配.例如(在OCaml中):

let rec len l =
  match l with
  | [] -> 0
  | x :: xs -> 1 + len xs
Run Code Online (Sandbox Code Playgroud)

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