scala implicit 隐式转换和隐式参数

2017-07-19  本文已影响0人  zy_now

1.什么是隐式转换和隐式参数?
隐式转换是以implicit 声明的带有单个参数的函数
隐式参数是函数或方法带有一个标记为implicit 的参数列表
隐式转换函数是在同一个作用域下,一个给定输入类型并自动转换为制定返回类型的函数,这个函数和函数名字无关,和入参名字无关,只和入参类型及返回类型有关.

2.隐式转换有设么作用?

implicit def  int2Fraction(n : Int) = Fraction(n,1)
val result = 3 * Fraction(4,5)

Int 3 被转换成一个Fraction对象

class RichFile( val from : File){
    def read = Source.fromFile(from.getPath).mkString
}
implicit def file2RichFIle(from: File) = new RichFile(from)
new File("README")'.read //调用file2RichFile 因为File 没有read 方法
  1. 什么情况下会调用隐式转换?
  1. 隐式参数用在哪里?
    使用Curying定义一个隐式调用函数
case calss Delimilters(left : String, right: String)
def quote(what: String)(implicit delims: Delimiters) =delims.left + what + delims.right

如果调用quote函数时,附加隐式函数,则自动在系统中寻找类型为Delimiters的隐式值.

implicit val quoteDelimiters   = Delimiters("<",">")
quote( "test for this")  // 实际上运行的是 quote("test for this")(Delimiters("<",">"))
上一篇 下一篇

猜你喜欢

热点阅读