Scala高级语法系列之隐式转换

  Scala隐式转换可分为三种类型:隐式参数、隐式类型转换、隐式类。其中,隐式类只能定义在单例对象/伴生对象中,笔者还没想到很好的使用场景,本篇不做案例。

案例一、隐式参数

package basic

object ImplicitParameter extends App {

  def add(a:Int)(implicit b:Int,c:Int) = a + b + c
  implicit val a = 2;
  //implicit val b = 3;
  println(add(1))
}

  上述add方法属于柯里化高阶方法,参数b和c被implicit关键字修饰,在执行期间,编译器会在上下文中寻找类型为Int的隐式参数。
  注意:

  1. 如果上下文中出现两个符合要求的隐式参数,则会抛出异常。
  2. add方法的形参,implicit只能修饰最后一个括号中的参数,否则编译不过。

案例二、隐式类型转换

  隐式类型转换,可以很方便的增强类的功能,如下案例,java.io.File并没有提供count方法,我们可以通过该方式,给File类提供count功能。(有点儿装饰器模式的味道)

/**
	File装饰类
*/
class AdvancedFile(file:File){
  /*
  val count = ()=>{
    Source.fromFile(file).getLines().length
  }*/
  def count()={
    val input = new BufferedReader(new InputStreamReader((new FileInputStream(file))))
    input.lines().count()

  }
}

object ImplicitDemo extends App{
  val file = new File("/Users/chenyuedong/Desktop/IT/test/familyname.pages")
  println(file.exists())
  implicit def fileToAdvancedFile(file:File) = new AdvancedFile(file)
  println(file.count())
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值