Scala隐式参数

  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 }

结果:

  

 

posted @ 2019-01-12 10:52  云山之巅  阅读(804)  评论(0编辑  收藏  举报