Scala隱式參數隱式值注意事項

package com.zhengkw.scala.day06Exc

/**
 * @ClassName:ImplicitValue
 * @author: zhengkw
 * @description:
 *   注意
 * - 找隱式值的時候, 只看類型, 不看變量的名字
 *
 * - 在作用域內, 只能有一個同類型的隱式值
 *
 * - 一個隱式參數列表內, 如果有多個參數, 則這些參數都是隱式的
 *
 * - 如果一個函數, 有很多參數, 有些用是隱式參數, 有些不是, 怎麼辦?
 *
 *   對函數做柯里化
 *
 *   - 使用兩個參數列表
 *   - 第一個是必須要傳
 *   - 第二個裏面是隱式參數
 *
 * - 如果使用隱式值, 則圓括號也要省略
 *
 * - 省略括號, 表示在使用 隱式值,  加上括號, 表示使用默認值
 * @date: 20/04/27下午 10:13
 * @version:1.0
 * @since: jdk 1.8 scala 2.11.8
 */
object ImplicitValue {
  //implicit val q = 123123  //可以用
  def main(args: Array[String]): Unit = {
    new ImplicitValue().foo() //使用默認值
   // new ImplicitValue().foo //使用隱式值
    implicit val q = 123123 //只要在同一代碼塊中 則可以推導出foo隱式值!
  }

  //implicit val q = 123123 //error 無法推斷出隱式值!
}

class ImplicitValue {

  def foo(implicit a: Int = 10) = {
    println(a)
  }
}

總結

implicit修飾的類就是隱式類

  • 好處: 省略去寫隱式轉換函數

  • 隱式類可以看成是隱式轉換函數的升級版!!!

  • 隱式類不能是頂級類, 只能是內部類.

    (implicit不能修飾頂級元素即可以用到內部類或者內部成員!)

注意

  • 找隱式值的時候, 只看類型, 不看變量的名字

  • 在作用域內, 只能有一個同類型的隱式值

  • 一個隱式參數列表內, 如果有多個參數, 則這些參數都是隱式的

  • 如果一個函數, 有很多參數, 有些用是隱式參數, 有些不是, 怎麼辦?

    對函數做柯里化

    • 使用兩個參數列表
    • 第一個是必須要傳
    • 第二個裏面是隱式參數
  • 如果使用隱式值, 則圓括號也要省略

  • 省略括號, 表示在使用 隱式值, 加上括號, 表示使用默認值

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