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

函数或者方法可以带有一个标记为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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值