Scala为什么元组不是零索引

时间:2014-03-25 18:50:51

标签: scala-2.10

Scala全新,请原谅我......

有没有理由为什么Scala“通常”使用从零开始的索引(例如列表,数组等),但元组是基于单一的,即一旦我进入Scala,我会看到一个很好的理由,或者这是只是你必须习惯的“怪癖”之一?

示例:

val myList = List(1, 2, 3)
println(myList(0))  // returns 1

val threesome = (1, 2, 3)
println(threesome._1) // returns 1

1 个答案:

答案 0 :(得分:0)

这纯粹是出于历史原因 - 不确定第一个“元组”界面的位置,但是如果它有助于你思考它,那么_1,_2等和类之间没有太大的区别你自己做了,并决定以相同的方式命名参数。在你知道你正在看什么arity元组之前,你不能使用任何函数:

// nonsense code.  "T >: Tuple" would mean "We want T to be a class which is a 

// subtype of Tuple" if that were at all possible.

def getMemberX[T >: Tuple](aRandomSizedTuple : T, x : Int) = aRandomSizedTuple._x )

见?在作用域中没有任何名为_x的值,因此即使在动态类型语言中也不会编译,因为序列可以这样做:

 // silly example.. but obviously works and belongs in the comparison.
 def getAtX[T](xs :Seq[T], x :Int) = xs(x)