Scala隐式转换之隐式参数(1)

来源:互联网 发布:云熙家具软件 编辑:程序博客网 时间:2024/05/21 08:47

函数或者方法可以带有一个标记为implicit的参数。在这种情况下,编译器将会查找缺省值,提供给该函数或者方法。示例:

case class D(left:String,right:String)def quote(title:String)(implicit d:D) =     d.left+title+d.right

可以用一个显示的D睇相来调用quote方法。这样:

quote("hello")(D("<<",">>"))//这其实就是柯里化

也可以略去参数列表:

quote("hello")

在这种情况下,编译器会查找一个类型为D的隐式值。这必须是一个被声明为implic的值。编译器将在如下两个地方查找这样的一个对象:

  1. 当前作用域所有可以用单个标识符指代的满足类型要求的val和def
  2. 与所要求类型相关联的类型的半生对象(相关联类型包括所要求类型本身以及他的类型参数)

比如,我们可以做一个对象:

object A {    implicit val m = D("<<",">>")    ……}

这样我们就可以从这个对象引入所有的值:

import A._

如此一来,两个标点符号就可以隐式的提供给quote函数了

如下代码是有两个相同类型的隐式参数是行不通的,因为编译器不知道怎么对应

def quote(title:String)(implicit left:String, right:String)

但是,隐式参数有什么作用呢?之后再去分析

0 0