在Scala中,我们可以通过以下方式创建Range对象:
var range = 1 to 10
Run Code Online (Sandbox Code Playgroud)
或者改为使用构造函数
var range = new Range(1,10,1)
Run Code Online (Sandbox Code Playgroud)
但是,如果我们查看Scala API for Range,我们只能看到一个定义了3个参数的构造函数.所以我的问题是:我们在哪里可以找到像第一个那样的构造函数的API?我希望在API页面上找到这些信息.
第一种语法糖实际上是通过以下步骤实现的.
第1步:隐式转换Int为RichInt使用中定义的内置隐式转换scala.Predef
@inline implicit def intWrapper(x: Int) = new runtime.RichInt(x)
Run Code Online (Sandbox Code Playgroud)
第2步:委托RichInt.to给Range.inclusive
def to(end: Int): Range.Inclusive = Range.inclusive(self, end)
Run Code Online (Sandbox Code Playgroud)
第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)
Run Code Online (Sandbox Code Playgroud)