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
不能修飾頂級元素即可以用到內部類或者內部成員!)
注意
-
找隱式值的時候, 只看類型, 不看變量的名字
-
在作用域內, 只能有一個同類型的隱式值
-
一個隱式參數列表內, 如果有多個參數, 則這些參數都是隱式的
-
如果一個函數, 有很多參數, 有些用是隱式參數, 有些不是, 怎麼辦?
對函數做柯里化
- 使用兩個參數列表
- 第一個是必須要傳
- 第二個裏面是隱式參數
-
如果使用隱式值, 則圓括號也要省略
-
省略括號, 表示在使用 隱式值, 加上括號, 表示使用默認值