轉載自 這裡
前言 :
Scala 是一個可直譯、編譯、靜態、運行於 JVM 之上、可與 Java 互操作、融合物件導向編程特性與函式編程風格的程式語言. Scala 本身具有擴充性,不過這必須了解更多語法特性與細節. Scala 建構式有些限制,使用方法可以定義所謂運算子(Operator),提供語法蜜糖與存取方法.
apply() 與 update() 方法 :
在介紹 Array 時曾經談過,如果要存取陣列,必須指定陣列索引,與其它語言存取陣列慣例不同的是,在 Scala 中,指定陣列索引時是使用 () 而非 [],例如 :
事實上,上面的程式,Scala會分別將之轉換為 update() 與 apply() 方法的呼叫 :
參考名稱後直接使用 () 的寫法,其實是 Scala 所提供的語法蜜糖,只要遇到 (),Scala就會試著將之展開為 apply() 呼叫,例如 some 若是參考名稱,則呼叫 some(.....),則 Scala 就會試著展開並呼叫 some.apply(...),而只要遇到 ()= 呼叫,則 Scala 就會試著展開 為update()=呼叫,例如寫下 some(...) = value,則 Scala 會試著展開並呼叫 some.update(...) = value . 所以任何類別只要有提供 apply() 方法或 update(),就可以使用 () 或 ()= 寫法,例如 :
基本上,參數也不只能有一個,而參數可以是任何的型態(畢竟只是語法蜜糖),例如 :
也可以使用 重複參數,只要記得,如果是()=,等號右邊就是update()最後一個參數 :
同樣的原則也可以套用在 單例物件 上,先前在單例物件也有提過,可以在定義單例物件時提供一個apply方法 :
那麼你就可以這麼使用 :
Scala 會自動將
Resource() 的呼叫,轉換為 Resource.apply() 的呼叫。技術上,object Resource 的語法,Scala 會產生一個 Resource$ 類別,你在 Resource 中定義的方法,會是Resource$ 類別中的方法之一,而程式中 Resource 是個參考名稱,參考至 Resource$ 的實例。依這個邏輯來看,你可以直接使用 Resource() 這樣的語法就是很自然的結果,而且就可以知道,如果願意,你也可以定義 update() 方法,例如 :
前言 :
Scala 是一個可直譯、編譯、靜態、運行於 JVM 之上、可與 Java 互操作、融合物件導向編程特性與函式編程風格的程式語言. Scala 本身具有擴充性,不過這必須了解更多語法特性與細節. Scala 建構式有些限制,使用方法可以定義所謂運算子(Operator),提供語法蜜糖與存取方法.
apply() 與 update() 方法 :
在介紹 Array 時曾經談過,如果要存取陣列,必須指定陣列索引,與其它語言存取陣列慣例不同的是,在 Scala 中,指定陣列索引時是使用 () 而非 [],例如 :
事實上,上面的程式,Scala會分別將之轉換為 update() 與 apply() 方法的呼叫 :
參考名稱後直接使用 () 的寫法,其實是 Scala 所提供的語法蜜糖,只要遇到 (),Scala就會試著將之展開為 apply() 呼叫,例如 some 若是參考名稱,則呼叫 some(.....),則 Scala 就會試著展開並呼叫 some.apply(...),而只要遇到 ()= 呼叫,則 Scala 就會試著展開 為update()=呼叫,例如寫下 some(...) = value,則 Scala 會試著展開並呼叫 some.update(...) = value . 所以任何類別只要有提供 apply() 方法或 update(),就可以使用 () 或 ()= 寫法,例如 :
基本上,參數也不只能有一個,而參數可以是任何的型態(畢竟只是語法蜜糖),例如 :
也可以使用 重複參數,只要記得,如果是()=,等號右邊就是update()最後一個參數 :
同樣的原則也可以套用在 單例物件 上,先前在單例物件也有提過,可以在定義單例物件時提供一個apply方法 :
那麼你就可以這麼使用 :
- val resource = Resource()
- println(resource.service("XD"))
沒有留言:
張貼留言