美文网首页
scala implicit 隐式转换和隐式参数

scala implicit 隐式转换和隐式参数

作者: zy_now | 来源:发表于2017-07-19 10:29 被阅读0次

    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("<",">"))
    

    相关文章

      网友评论

          本文标题:scala implicit 隐式转换和隐式参数

          本文链接:https://www.haomeiwen.com/subject/njuhkxtx.html