scala中的implicit

scala中的implicit

一:用于参数(Implicit parameters)

函数中的最后一个参数可以被implicit标记;当函数被调用时,被implicit标记的值会从该函数被调用的地方的上下文中自动寻找,并自动装配。如果没有找到相应类型的也被implicit修饰是值,在编译时会报错。

example:

 // probably in a library
class Prefixer(val prefix: String)
def addPrefix(s: String)(implicit p: Prefixer) = p.prefix + s

  // then probably in your application
implicit val myImplicitPrefixer = new Prefixer("***")
addPrefix("abc")  // returns "***abc"

二:隐式转换(Implicit conversions)

当一个表达式上下文中要求A类型的变量,但是在表达式中,该变量是B类型
编译器会在表达式上下文(比如类A或类B中伴生对象中定义的函数)中寻找B => A类型的隐式值(implicit value),用于将表达式中B类型变量自动转换为A类型变量。所以,对于没有加implicit类型的函数来说,编译器会自动将加了implicit的函数用于类型转换。

example:

implicit def doubleToInt(d: Double) = d.toInt
val x: Int = 42.0

def doubleToInt(d: Double) = d.toInt
val x: Int = doubleToInt(42.0)

的效果是一样的。

参考:stackoverflow中的一个回答

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值