Scala:數字是物件,函式也是物件!
在Scala中,一切皆物件!比Java的物件導向理念還徹底!
Scala裡,數字是物件,函式也是物件!
數字是物件
比如:1 + 2 * 3 / 2,和下面這個是一樣的:
(1).+(((2).*(3))./(2))
可以看出,“+”,“-”,“*”,“/”在Scala中同樣是有效的名稱。
在第二個表示式中的這些括號是必須的,因為 Scala 的分詞器使用最長規則來進行分詞。所以它會把下面的表示式:
1.+(2)
理解成表達項“1.”,“+”,和“2”的組合。這樣的組合結果是由於“1.”是一個有效的表達項並且比表達項“1”要長,表達項“1.”會被當作“1.0”,使得它成為一個double型別而非int型別。而下面的表示式阻止了分析器錯誤的理解:
(1).+(2)
函式是物件
把函式當成值進行操作是函式型程式語言的基石。
函式在Scala語言裡面是一個物件,把函式作為引數進行傳遞,把它們存貯在變數中,或者當作另一
個函式的返回值都是可能的。
函式是物件,將給Scala填上無窮的威力,這點是Java語言做不到的。
來看個計時器的例子:
object Timer {
def oncePerSecond(callback: () => Unit) {
while (true) {callback(); Thread sleep 1000 }
}
//作為回撥的函式
def timeFlies() {
//使用預定義的函式println,而非使用System.out.println(...)
println("每秒都列印一下..")
}
//主函式呼叫計時器並傳遞列印句子的函式作為回撥,這個程式永無止境的每秒列印一句話
def main(args: Array[String]) {
oncePerSecond(timeFlies)
}
}
執行如下:
用匿名函式改進定時器程式
上面的定時器函式完全可以用匿名函式寫得更簡潔一些的。
object TimerAnonymous {
def oncePerSecond(callback: () => Unit) {
while (true) {callback(); Thread sleep 1000 }
}
def main(args: Array[String]) {
oncePerSecond(() =>
println("每秒都列印一下.."))
}
}
有沒有發現呢?Scala真的很酷!很多好玩的!
相關文章
- JS function 是函式也是物件, 淺談原型鏈JSFunction函式物件原型
- 函式物件、物件、原型函式物件原型
- 類物件作為實參傳入函式,函式是複製物件還是直接使用物件的問題物件函式
- JavaScript 函式引數解構物件JavaScript函式物件
- 物件,函式作為一個函式的引數物件函式
- Scala(四):物件物件
- Scala單例物件、伴生物件單例物件
- Scala學習(六)---Scala物件物件
- 類函式和物件函式 PHP函式物件PHP
- Scala 類和物件物件
- scala物件導向物件
- Scala可變物件物件
- scala類和物件物件
- js函式,arguments物件JS函式物件
- js-arguments 函式引數物件詳解JS函式物件
- 例項物件和函式物件的區別物件函式
- Scala學習 2 Scala物件導向物件
- 建構函式建立物件函式物件
- js的函式和物件JS函式物件
- JavaScript 表單、物件、函式JavaScript物件函式
- 物件及函式相關物件函式
- 定義函式物件 (轉)函式物件
- scala函式函式
- 函式物件、裝飾器、閉包函式函式物件
- 理清原型物件、 例項物件、建構函式原型物件函式
- JS函式,物件,例項方法,物件方法理解JS函式物件
- 使用arguments物件獲取函式傳遞的引數物件函式
- 探索Scala(3)-- 單例物件單例物件
- Scala函式與函數語言程式設計函式函數程式設計
- C++中函式指標與函式物件C++函式指標物件
- javascript生成map物件的函式JavaScript物件函式
- 深入探討JavaScript函式物件JavaScript函式物件
- c++內建函式物件C++函式物件
- 聚合函式與數字函式函式
- Scala(一):函式、流程控制、引數函式
- 【Scala篇】--Scala中的函式函式
- scala(三)函式函式
- Scala偏函式函式