Scala入門之隱式轉換與隱式參數

1.隱式轉換

    隱式轉換是一項強大的程序語言功能,它不僅能夠簡化程序設計,也能夠使程序具有很強的靈活性。
    隱式函數的名稱對結構沒有影響.函數可以是任何名字,只看參數與返回,也就是看能不能把傳入的參數變成需要的類型就行了。
    隱式轉換可以定義在目標文件當中,即隱式轉換函數與目標代碼在同一個文件當中,
也可以將隱式轉換集中放置在某個包中,在使用時直接將該包引入即可,後者更常見。
    隱式轉換髮生的時間:
    1.當方法中參數的類型與實際類型不一致時
    2.當調用類中不存在的方法或成員時,會自動將對象進行隱式轉換

2.隱式參數

在一般的函數據定義過程中,需要明確傳入函數的參數,如果給函數定義隱式參數的話,則在使用時可以不帶參數.

3.蘑菇雲代碼

package com.dtspark.scala.basics

/**
  * 人是如何變成超人的!
  */
/**
  *這是一個人。
  */
class Man(val name: String)
/*object Man{
  implicit def man2SuperMan(man: Man) = new SuperMan(man.name)
}*/
/**
  *這是一個超人,看他們之間是沒有任何關係的
  */
class SuperMan(val name: String){
  //超人有超能力。
  def Superpowers = println("Wow,wow,wow," +  this.name +"  get a super natural power, will save the world now!!")
}

/**
  * 這是變身的條件
  */
object implicts{
  implicit def man2SuperMan(man: Man) = new SuperMan(man.name)
}
object HelloImplicits {
  def main(args: Array[String]): Unit = {
    println("=======隱式轉換=========")
    import com.dtspark.scala.basics.implicts._
    //創建一個人出來
    val man = new Man("王大錘")
    //沒有引入import com.dtspark.scala.basics.implicts._時這個人是不能使用超能力的。
    //所謂隱式轉換就是把一個對象轉換成另一個對象的過程,目的是調用另一個對象的方法
    man.Superpowers

    println("=======隱式參數=========")
    implicit val content = "Dollar"
    //talk要傳入兩個參數,第二個是隱式的,它會自己去找一個隱式的變量。
    //implicit val contentA = "wangdada"如果我這裏再定義一個滿足String要求的隱式變量,會找不到而報錯。
    //隱式參數只看參數類型不管參數名稱
    //mplicit val contentB = "gao"
    talk("Scala")

  }

  def talk(name: String)(implicit content:String) = println(name + " : " +content)
}

以上內容來自[DT大數據夢工廠]首席專家Spark專家王家林老師的課程分享。感謝王老師的分享,更多精彩內容請掃描關注[DT大數據夢工廠]微信公衆號DT_Spark

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章