Scala高級語法系列之隱式轉換

  Scala隱式轉換可分爲三種類型:隱式參數、隱式類型轉換、隱式類。其中,隱式類只能定義在單例對象/伴生對象中,筆者還沒想到很好的使用場景,本篇不做案例。

案例一、隱式參數

package basic

object ImplicitParameter extends App {

  def add(a:Int)(implicit b:Int,c:Int) = a + b + c
  implicit val a = 2;
  //implicit val b = 3;
  println(add(1))
}

  上述add方法屬於柯里化高階方法,參數b和c被implicit關鍵字修飾,在執行期間,編譯器會在上下文中尋找類型爲Int的隱式參數。
  注意:

  1. 如果上下文中出現兩個符合要求的隱式參數,則會拋出異常。
  2. add方法的形參,implicit只能修飾最後一個括號中的參數,否則編譯不過。

案例二、隱式類型轉換

  隱式類型轉換,可以很方便的增強類的功能,如下案例,java.io.File並沒有提供count方法,我們可以通過該方式,給File類提供count功能。(有點兒裝飾器模式的味道)

/**
	File裝飾類
*/
class AdvancedFile(file:File){
  /*
  val count = ()=>{
    Source.fromFile(file).getLines().length
  }*/
  def count()={
    val input = new BufferedReader(new InputStreamReader((new FileInputStream(file))))
    input.lines().count()

  }
}

object ImplicitDemo extends App{
  val file = new File("/Users/chenyuedong/Desktop/IT/test/familyname.pages")
  println(file.exists())
  implicit def fileToAdvancedFile(file:File) = new AdvancedFile(file)
  println(file.count())
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章