Scala語言的特點
- 集成面向對象和函數式編程
val、var、def、lazy val的區別
- var 變量值可變,變量類型不可變
- val 常量聲明關鍵字
- def 關鍵字用於創建方法
- lazy val 需要計算時才使用,避免重複計算
trait與 abstract class的區別
- trait類似於Java中的接口,使用extends,但是要繼承多個時,使用with
- abstract class僅一個extends,且可以爲帶有參數的構造函數
object與class的區別
- object是類的單例對象,無需new來生成對象,如果類的名稱與對象名稱相同,則稱爲該類的伴生對象
說說case class
- 自動添加與類名一致的構造函數,即伴生對象,通過apply實現
- 樣本中的參數默認爲val類型
- 默認實現hashcode、toString、equals、copy等方法
Nil、Null、None、Nothing的區別
- Null是一個trait,null是它唯一的實例
- Nothing也是一個trait,沒子類型,也沒實例
- Nil表示List的空類型
- None是Option的一個選項,表示空值;Option的另外一個選項是Some
Unit類型
Unit相當於Java中的void
什麼是柯里化函數
- 一個接收多個參數的函數轉化爲接收其中幾個參數的函數,並返回函數
- 優點:提高了主函數的封閉性,提高功能上的可擴張性與靈活性
什麼是閉包
- 閉包是一個函數,返回值依賴聲明在函數外部的一個或者多個變量,實質就是代碼用到的非局部變量的混合
implicit
- 作用:隱式參數、類型加強、隱式轉換
- implicit 的具體應用
- 缺點:implicit關鍵字只能用來修飾方法、變量
- 優點:隱式轉換函數名可以是任意的