在Scala中,我们可以通过以下两种方法来创建Range对象:
var range = 1 to 10
或者使用构造函数
var range = new Range(1,10,1)
但是,如果我们查看Scala API for Range,我们只能看到一个定义了3个参数的构造函数。因此,我的问题是:在哪里可以找到像第一个构造函数那样的API?我希望在API页面上找到这些信息。
发布于 2016-01-31 16:30:32
第一个语法糖实际上是通过以下步骤实现的。
步骤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)
发布于 2016-02-01 05:50:08
Max的回答解释了to
和until
是如何工作的,但最终,您的问题并没有真正的答案。关于Range
的介绍性材料提到了until
,但是to
和until
并没有在那里被记录下来,因为它们不是Range
的构造函数或伴生对象方法。Scaladoc没有通过RichInt
将间接路径连接到Range
页面的方法。也许应该这样。
https://stackoverflow.com/questions/35116088
复制相似问题