1.1.4 Scala是一种可伸缩和可扩展的语言
Scala,可伸缩的语言。 它的一个设计目标即是创造出一种可以随着需求伸缩扩展的语言。 Scala既能够被当成脚本语言使用,又能在大型企业级应用中大展拳脚。 Scala的组件抽象、简洁的语法以及同时支持面向对象和函数式编程,保证了它语言的可伸缩性。
同时,Scala提供了独特的语言组合机制,使它能够轻松的以类库的形式添加新的语言结构。 你可以把任何方法当成中缀或后缀操作符来使用,闭包可以作为“按名传递”(pass by name)参数传递给其它函数(如下面清单)。 这些特性使开发者可以非常容易的定义新的结构。
让我们创建一个与while功能类似的循环结构loopTill,如下:
清单1.1 在Scala中创建一个loopTill循环结构
def loopTill(cond: => Boolean)(body: => Unit): Unit = {
if (cond) {
body
loopTill(cond)(body)
}
}
var i = 10
loopTill (i > 0) {
println(i)
i -= 1
}
在上述代码中,你通过声明一个带两个参数的loopTill
方法创建了一个新的loopTill结构。
第一个参数是一个条件(i > 0)
,第二个参数是一个闭包。
当条件计算的结果为true
时,这个loopTill
函数会执行这个给定的闭包。
定义
闭包是一种与自由变量(free variable)绑定在词法环境(lexical environment)上的头等函数。 在loopTill
的例子中,自由变量是i
,虽然它是定义在闭包之外的,但是你仍然可以在闭包函数内部使用它。loopTill
中第二个参数是一个闭包,在Scala中,它是scala.Function0类型的一个对象。
与扩展语言本身相比,以类库的形式来扩展一个语言要容易很多,因为你不必担心向后兼容问题。 例如,Scala的actor实现(1.2.2节)只是一个类库,并不是Scala语言的一部分。 当觉得之前的actor实现不能满足需求时,我们可以向Scala添加另一个actor实现,不用担心造成任何破坏。