1. 程式人生 > >快學Scala第二章學習筆記

快學Scala第二章學習筆記

1、如果在REPL中貼上成塊的程式碼,可以鍵入:paste,把程式碼貼上進去,CTRL+D結束

2、在Scala中,{}塊包含一系列的表示式,其結果也是一個表示式。快中最後一個表示式的值就是塊的值。

這種特性對於那種某個val初始化需要分多步完成的情況很有用。

例如:val distance={val dx = x-x0; val dy=y-y0; sqrt(dx*dx + dy*dy)}

3、x=y=1 //別這樣寫  y=1的值是(),不太可能把一個Unit蕾西的值賦予給x。

4、用readLine函式從控制檯讀取一行輸入。帶一個引數作為提示字串

例如:val name=readLine("Your name: ")

5、在for迴圈的變數之前並沒有val或var的指定。該變數的型別是集合的元素型別。迴圈變數的作用域一直持續到迴圈結束。

util方法返回一個並不包含上限的區間。

6、Scala並沒有break、continue語句來退出迴圈。控制權的轉移是通過丟擲和捕獲異常完成的,如果時間很重要,儘量避免用這套機制。

7、如果for迴圈的迴圈體以yield開始,則該迴圈會構造出一個集合,每次迭代生成集合中的一個值。

8、定義函式,需要給出函式的名稱、引數和函式體。必須給出所有引數的型別,只要函式不是遞迴,可以不需要指定返回型別。Scala編譯器可以通過=符號右側的表示式型別推斷出返回型別。遞迴函式沒有指定返回型別,Scala編譯器無法校驗返回型別。

9、帶名引數並不需要跟引數列表的順序完全一致。帶名引數可以讓函式更加可讀。

10、Scala對於不返回值的函式有特殊的表示法。如果函式體包含在花括號當中但沒有前面的=號,那麼返回型別就是Unit

11、當val被宣告為lazy時,它的初始化將被推遲,直到我們首次對它取值。懶值並不是沒有額外開銷,我們每次訪問,都會有一個方法被呼叫,這個方法將會以執行緒安全的方式檢查該值是否已被初始化。

12、try/catch和try/finally的目的是互補的。try/catch語句處理異常,而try/finally語句在異常沒有被處理時執行某種動作(通常是清理工作)