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函式物件原型
- 函式物件、物件、原型函式物件原型
- 類物件作為實參傳入函式,函式是複製物件還是直接使用物件的問題物件函式
- Scala(四):物件物件
- JavaScript 函式引數解構物件JavaScript函式物件
- scala物件導向物件
- Scala 類和物件物件
- js函式,arguments物件JS函式物件
- 類别範本物件做函式引數物件函式
- js-arguments 函式引數物件詳解JS函式物件
- 例項物件和函式物件的區別物件函式
- 物件及函式相關物件函式
- 建構函式建立物件函式物件
- JavaScript 表單、物件、函式JavaScript物件函式
- js的函式和物件JS函式物件
- 理清原型物件、 例項物件、建構函式原型物件函式
- JS函式,物件,例項方法,物件方法理解JS函式物件
- 函式物件、裝飾器、閉包函式函式物件
- Python開發是程式導向、函式還是物件?Python教程Python函式物件
- C++中函式指標與函式物件C++函式指標物件
- c++內建函式物件C++函式物件
- uniCloud雲函式概述---雲物件Cloud函式物件
- Python進階07 函式物件Python函式物件
- scala(三)函式函式
- Scala(一):函式、流程控制、引數函式
- Python開發是程式導向、函式還是物件?Python基礎!Python函式物件
- 6.5. 常用物件——6.5.5. 函式物件函式
- 037:函式物件的過濾器函式物件過濾器
- 對JavaScript中函式物件的理解JavaScript函式物件
- 5-函式與物件的方法函式物件
- C++ 常物件和常函式C++物件函式
- c++中物件的引用作為函式的引數C++物件函式
- 物件和函式的區別就是物件可以儲存狀態物件函式
- 《JavaScript物件導向精要》之四:建構函式和原型物件JavaScript物件函式原型
- C++ lambda 表示式與「函式物件」(functor)C++函式物件
- Scala的物件導向程式設計物件程式設計
- Scala的類、屬性、物件欄位物件
- flink的print()函式輸出的都是物件地址而非物件內容函式物件
- Javascript 物件 – 數學物件JavaScript物件