关闭

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

标签: scala隐式参数
236人阅读 评论(0) 收藏 举报
分类:

函数或者方法可以带有一个标记为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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    文章分类
    最新评论