Scala全新,请原谅我......
有没有理由为什么Scala“通常”使用从零开始的索引(例如列表,数组等),但元组是基于单一的,即一旦我进入Scala,我会看到一个很好的理由,或者这是只是你必须习惯的“怪癖”之一?
示例:
val myList = List(1, 2, 3)
println(myList(0)) // returns 1
val threesome = (1, 2, 3)
println(threesome._1) // returns 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)