語法糖,又稱為糖衣語法,指計算機語言中添加的某種語法,這種語法對語言的功能并沒有影響,但是更方便程序員使用。通常來說可以增加程序的可讀性,從而減少程度代碼出錯的機會。接下來就會介紹兩個 Scala 中的語法糖。
在 Scala 中,如果我們要頻繁調(diào)用某個 class 或 object 的方法,我們可以通過定義 apply 方法來避免每次寫出該函數(shù)的調(diào)用,而使用一種更加簡潔的方式,來看下面的例子:
不使用 apply 方法
scala> class truck {
| def transport( goods: Int ): Unit = {
| println( "truck transport " + goods + "t goods" )
| }
| }
defined class truck
scala> val t = new truck
t: truck = truck@77468bd9
scala> t.transport( 100 )
truck transport 100t goods
使用 apply 方法
scala> class truck {
| def apply( goods: Int ): Unit = {
| println( "truck transport " + goods + "t goods" )
| }
| }
defined class truck
scala>
scala> val t = new truck
t: truck = truck@68bbe345
scala> t(100)
truck transport 100t goods
上面兩個例子的效果是完全一樣的,下面這個定義了 apply 的類能讓我們在頻繁調(diào)用某個方法的時候更加方便。當(dāng)然,apply 方法支持任意類型和任意個參數(shù)。
另一種 apply 常用的使用場景是用 object 來創(chuàng)建其伴生類的實例。如下例:
private class truck {
println( "new truck created!" )
}
object truck {
def apply(): Unit = {
new truck
}
}
object TT {
def main (args: Array[String]) {
val t = truck()
}
}
輸出:
new truck created!
其實上例中,truck()就是調(diào)用了truck.apply()方法,編譯器在編譯時將truck()編譯成truck.apply(),如果你對編譯后的結(jié)果進行反編譯就能驗證這一點,這留給有興趣的同學(xué)自行實踐,這里不展開了。
apply 方法在我們平時寫代碼時也經(jīng)常碰到,比如:
val l = List(1,2,3)
中的 List(1,2,3) 調(diào)用就是調(diào)用的 object List 的 apply 方法

除了 apply 方法,還有一個用于賦值時的 update 方法,
scala> val a = mutable.Map[ Int, Int ]()
a: scala.collection.mutable.Map[Int,Int] = Map()
scala> a(1) = 1
scala> println( a )
Map(1 -> 1)
當(dāng)我們調(diào)用 a(1) = 1 的時候其實是在調(diào)用 a.update(1,1),當(dāng)然你也可以在自定義類中實現(xiàn) update 使調(diào)用更方便。就像下面這個例子一樣
scala> class A {
| private var a = 0
|
| def update( i: Int ): Unit = {
| a = i
| println( a )
| }
| }
defined class A
scala> val a = new A
a: A = A@27e47833
scala> a() = 2
2
**傳送門: **Scala 在簡書目錄