在Scala中,我们可以通过执行以下操作来创建Range对象:
var range = 1 to 10
或者改为使用构造函数
var range = new Range(1,10,1)
但是,如果我们查看Scala API for Range,我们只能看到一个定义了3个参数的构造函数。所以我的问题是:我们在哪里可以找到像第一个那样的构造函数的API?我希望在API页面上找到这些信息。
答案 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的回答解释了to
和until
的工作原理,但最后,您的问题并没有真正得到答案。 Range
提及until
,但to
和until
的介绍材料未在此处记录,因为它们不是Range
的构造函数或伴随对象方法。 Scaladoc没有办法将RichInt
的间接路径连接到Range
的页面。也许它应该。