【发布时间】:2010-10-14 22:14:26
【问题描述】:
许多示例 Scala 代码包含名为“xs”的字符串和集合。 为什么是xs?
例子:
var xs = List(1,2,3)
val xs = "abc"
【问题讨论】:
-
相关(但可能不重复)stackoverflow.com/questions/1564758/…
标签: scala naming-conventions identifier
许多示例 Scala 代码包含名为“xs”的字符串和集合。 为什么是xs?
例子:
var xs = List(1,2,3)
val xs = "abc"
【问题讨论】:
标签: scala naming-conventions identifier
基本上,这是一种源自 LISP 的命名约定。其背后的基本原理是:
【讨论】:
【讨论】:
除了xs 是 x 的复数,正如@Ken Bloom 指出的那样,还需要注意像 Scala 这样的语言如何构造 List。 List 的结构是一个链表,其中容器对第一项和列表的其余部分都有引用。
:: 运算符(称为cons)将列表构造为:
42 :: 69 :: 613 :: Nil
:: 出现在模式匹配中时也会将列表提取到第一项和列表的其余部分,如下所示:
List(42, 69, 613) match {
case x :: xs => x
case Nil => 0
}
由于这种模式无处不在,读者可以推断xs 暗示“列表的其余部分”。
【讨论】:
我在函数式编程教程中看到此名称用于列表变量,但不是字符串(字符串被视为字符列表的情况除外)。
它基本上是示例中使用的虚拟名称。你可以命名一个标量变量x,而一个列表命名为xs,因为xs是x的复数形式。在生产代码中,最好有一个更具描述性的名称。
您可能还会在模式与列表匹配的代码中看到这一点。例如(在 OCaml 中):
let rec len l =
match l with
| [] -> 0
| x :: xs -> 1 + len xs
一对更具描述性的名称可能是first :: rest,但这只是一个示例。
【讨论】: