Scala Range构造函数API

时间:2016-01-31 16:19:56

标签: scala

在Scala中,我们可以通过执行以下操作来创建Range对象:

var range = 1 to 10

或者改为使用构造函数

var range = new Range(1,10,1)

但是,如果我们查看Scala API for Range,我们只能看到一个定义了3个参数的构造函数。所以我的问题是:我们在哪里可以找到像第一个那样的构造函数的API?我希望在API页面上找到这些信息。

2 个答案:

答案 0 :(得分:6)

第一种语法糖实际上是通过以下步骤实现的。

第1步:使用Int

中定义的内置隐式转化,将RichInt隐式转换为scala.Predef
@inline implicit def intWrapper(x: Int)         = new runtime.RichInt(x)

第2步:将RichInt.to委托给Range.inclusive

def to(end: Int): Range.Inclusive = Range.inclusive(self, end)

第3步:使用Range函数构建Range.inclusive对象

def inclusive(start: Int, end: Int): Range.Inclusive = new Inclusive(start, end, 1)

// note Range.Inclusive is a subclass of Range
class Inclusive(start: Int, end: Int, step: Int) extends Range(start, end, step)

答案 1 :(得分:1)

Max的回答解释了tountil的工作原理,但最后,您的问题并没有真正得到答案。 Range提及until,但tountil的介绍材料未在此处记录,因为它们不是Range的构造函数或伴随对象方法。 Scaladoc没有办法将RichInt的间接路径连接到Range的页面。也许它应该。