1.1.4 Scala是一种可伸缩和可扩展的语言

Scala,可伸缩的语言。 它的一个设计目标即是创造出一种可以随着需求伸缩扩展的语言。 Scala既能够被当成脚本语言使用,又能在大型企业级应用中大展拳脚。 Scala的组件抽象、简洁的语法以及同时支持面向对象和函数式编程,保证了它语言的可伸缩性。

同时,Scala提供了独特的语言组合机制,使它能够轻松的以类库的形式添加新的语言结构。 你可以把任何方法当成中缀或后缀操作符来使用,闭包可以作为“按名传递”(pass by name)参数传递给其它函数(如下面清单)。 这些特性使开发者可以非常容易的定义新的结构。

让我们创建一个与while功能类似的循环结构loopTill,如下:

清单1.1 在Scala中创建一个loopTill循环结构

  1. def loopTill(cond: => Boolean)(body: => Unit): Unit = {
  2. if (cond) {
  3. body
  4. loopTill(cond)(body)
  5. }
  6. }
  7. var i = 10
  8. loopTill (i > 0) {
  9. println(i)
  10. i -= 1
  11. }

在上述代码中,你通过声明一个带两个参数的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实现,不用担心造成任何破坏。

链接