Scala方法可以具有隐式参数列表,由参数列表开头的implicit关键字标记。如果参数列表中的参数没有像往常一样传递,Scala将查看它是否可以获得正确类型的隐式值,如果可以,将自动传递。
Scala将查找这些参数的位置分为两类:
1.Scala在调用包含有隐式参数块的方法时,将首先查找可以直接访问的隐式定义和隐式参数(无前缀)。
2.在所有伴生对象中查找与隐式候选类型相关的有隐式标记的成员。
1 package big.data.analyse.scala 2 3 /** 4 * Created by zhen on 2019/1/12. 5 */ 6 /** 7 * 定义隐式参数 8 * 单个 9 */ 10 object ImplicitContext{ 11 implicit val sex : String = "man" //名称不影响下面使用,可以是不同的名称 12 } 13 /** 14 * 定义隐式参数 15 * 多个 16 */ 17 object ImplicitContextMutil{ 18 implicit val sex : String = "woman" //名称不影响下面使用,可以是不同的名称 19 implicit val he : String = "he" 20 } 21 object ImplicitParam { 22 //定义使用隐式参数的函数 23 def useImplicitMethod(name : String)(implicit sex : String){ // 柯里化 24 println(name + " has eighteen years old,he is a good "+ sex) 25 } 26 def main(args: Array[String]) { 27 useImplicitMethod("L.L")("girl") 28 // 导入隐式参数 29 import ImplicitContext._ // 导入全部,只能存在一个隐式参数 30 useImplicitMethod("J.J") 31 /** 32 * 当存在多个隐式参数时,要想使第二次导入的生效必须定义成相同的名称。 33 */ 34 //import ImplicitContextMutil.he // 失效 35 import ImplicitContextMutil.sex // 导入指定的一个隐式参数,避免出现歧义 36 useImplicitMethod("J.K") 37 } 38 }
结果: