(2) - apply, update 語法糖

語法糖沪斟,又稱為糖衣語法,指計(jì)算機(jī)語言中添加的某種語法暇矫,這種語法對(duì)語言的功能并沒有影響主之,但是更方便程序員使用。通常來說可以增加程序的可讀性李根,從而減少程度代碼出錯(cuò)的機(jī)會(huì)槽奕。接下來就會(huì)介紹兩個(gè) Scala 中的語法糖。

在 Scala 中房轿,如果我們要頻繁調(diào)用某個(gè) class 或 object 的方法粤攒,我們可以通過定義 apply 方法來避免每次寫出該函數(shù)的調(diào)用,而使用一種更加簡(jiǎn)潔的方式囱持,來看下面的例子:

不使用 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

上面兩個(gè)例子的效果是完全一樣的夯接,下面這個(gè)定義了 apply 的類能讓我們?cè)陬l繁調(diào)用某個(gè)方法的時(shí)候更加方便。當(dāng)然纷妆,apply 方法支持任意類型和任意個(gè)參數(shù)盔几。

另一種 apply 常用的使用場(chǎng)景是用 object 來創(chuàng)建其伴生類的實(shí)例。如下例:

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!

其實(shí)上例中掩幢,truck()就是調(diào)用了truck.apply()方法逊拍,編譯器在編譯時(shí)將truck()編譯成truck.apply(),如果你對(duì)編譯后的結(jié)果進(jìn)行反編譯就能驗(yàn)證這一點(diǎn)际邻,這留給有興趣的同學(xué)自行實(shí)踐芯丧,這里不展開了。

apply 方法在我們平時(shí)寫代碼時(shí)也經(jīng)常碰到世曾,比如:

val l = List(1,2,3)

中的 List(1,2,3) 調(diào)用就是調(diào)用的 object List 的 apply 方法


除了 apply 方法缨恒,還有一個(gè)用于賦值時(shí)的 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 的時(shí)候其實(shí)是在調(diào)用 a.update(1,1)轮听,當(dāng)然你也可以在自定義類中實(shí)現(xiàn) update 使調(diào)用更方便骗露。就像下面這個(gè)例子一樣

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 在簡(jiǎn)書目錄

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蛤克,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子践付,更是在濱河造成了極大的恐慌端壳,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,843評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件督暂,死亡現(xiàn)場(chǎng)離奇詭異拨脉,居然都是意外死亡矛市,警方通過查閱死者的電腦和手機(jī)辨赐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門优俘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人掀序,你說我怎么就攤上這事帆焕。” “怎么了不恭?”我有些...
    開封第一講書人閱讀 163,187評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵叶雹,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我换吧,道長(zhǎng)折晦,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,264評(píng)論 1 292
  • 正文 為了忘掉前任沾瓦,我火速辦了婚禮满着,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘贯莺。我一直安慰自己风喇,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,289評(píng)論 6 390
  • 文/花漫 我一把揭開白布缕探。 她就那樣靜靜地躺著魂莫,像睡著了一般。 火紅的嫁衣襯著肌膚如雪撕蔼。 梳的紋絲不亂的頭發(fā)上豁鲤,一...
    開封第一講書人閱讀 51,231評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音鲸沮,去河邊找鬼琳骡。 笑死,一個(gè)胖子當(dāng)著我的面吹牛讼溺,可吹牛的內(nèi)容都是我干的楣号。 我是一名探鬼主播,決...
    沈念sama閱讀 40,116評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼怒坯,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼炫狱!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起剔猿,我...
    開封第一講書人閱讀 38,945評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤视译,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后归敬,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體酷含,經(jīng)...
    沈念sama閱讀 45,367評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鄙早,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,581評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了椅亚。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片限番。...
    茶點(diǎn)故事閱讀 39,754評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖呀舔,靈堂內(nèi)的尸體忽然破棺而出弥虐,到底是詐尸還是另有隱情,我是刑警寧澤媚赖,帶...
    沈念sama閱讀 35,458評(píng)論 5 344
  • 正文 年R本政府宣布霜瘪,位于F島的核電站,受9級(jí)特大地震影響省古,放射性物質(zhì)發(fā)生泄漏粥庄。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,068評(píng)論 3 327
  • 文/蒙蒙 一豺妓、第九天 我趴在偏房一處隱蔽的房頂上張望惜互。 院中可真熱鬧,春花似錦琳拭、人聲如沸训堆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,692評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽坑鱼。三九已至,卻和暖如春絮缅,著一層夾襖步出監(jiān)牢的瞬間鲁沥,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,842評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工耕魄, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留画恰,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,797評(píng)論 2 369
  • 正文 我出身青樓吸奴,卻偏偏與公主長(zhǎng)得像允扇,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子则奥,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,654評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容