【问题标题】:Scala Why are Tuples not zero indexedScala为什么元组不是零索引
【发布时间】:2014-03-25 18:50:50
【问题描述】:

Scala 新手,请见谅...

Scala“通常”使用从零开始的索引(例如列表、数组等)但元组是从一开始的,也就是说,一旦我深入了解 Scala,我会看到一个很好的理由吗?只是你必须习惯的“怪癖”之一?

例子:

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

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

【问题讨论】:

  • 三人行,哦耶! :D

标签: scala-2.10


【解决方案1】:

这纯粹是出于历史原因 - 不确定第一个“元组”接口来自哪里,但如果它有助于您思考,_1、_2 等与类之间没有太大区别您自己制作并决定以相同的方式命名参数。在您知道您正在查看的元组之前,您不能使用任何函数:

// 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)  

【讨论】:

    猜你喜欢
    • 2011-06-14
    • 2019-05-07
    • 1970-01-01
    • 1970-01-01
    • 2011-09-25
    • 2016-11-04
    • 2017-10-28
    • 2017-03-17
    • 2011-05-30
    相关资源
    最近更新 更多