隐式参数出体验

来源:互联网 发布:baselight调色软件 编辑:程序博客网 时间:2024/05/17 06:40
参考文献
scala 深入浅出实战经典 . 王家林
场景
隐式参数出的基本概念
实验

package com.scode.scalaimport java.io.Fileimport scala.io.Source/** * author: Ivy Peng * function: Curring & Partial Function & Partial applied Function 学习 * date:2016/03/28 06.00 * 1、隐式转换:在当前对象中,隐式添加其他对象的方法,以增强当前对象的功能。 *  * 2、隐式参数下的三种 隐式转换方式 *  */class RichFile(val file:File){  def read=Source.fromFile(file.getPath()).mkString}object Context{  implicit def file2RichFile(file:File)=new RichFile(file)}object Context_Implicit{  implicit val default_val:String = "java"}object Param{  def print(content:String)(implicit language:String)  {    println(content+":"+language)  }}class Pair_Implicits[T](val first:T,val second:T){  def bigger(implicit ordered:Ordering[T])=if(ordered.compare(first, second)>0)first else second}class Pair_Implicitly[T:Ordering](val first:T,val second:T){  //implicitly方法提取运行时 T:Ordering  def bigger=if(implicitly[Ordering[T]].compare(first, second)>0) first else second}class Pair_Implicitly_Ordered[T:Ordering](var first:T,var second:T){  def bigger=  {    import Ordered._    if(first>second) first else second  }}object Hello_Implicit{  def main(args: Array[String]): Unit =  {    /*     * 隐式转换初体验     */    import Context.file2RichFile    println(new File("D:\\txt.txt").read)        /*     * 隐式参数     * 1、可以正常显式调用     * 2、隐式调用:调用前须导入隐式参数     */    Param.print("Spark")("scala")        import Context_Implicit._    Param.print("Hadoop")        /*     * 隐式参数下的隐式转换-函数参数     * 语法: implicit varName:T => enhancerClass[T]     */    def bigger[T](a:T,b:T)(implicit ordered:T=>Ordered[T])=if(a>b)a else b    println(bigger(4,3))    println(bigger("Apple","Banana"))        //三种使用方法    println(new Pair_Implicits(7,9).bigger)    println(new Pair_Implicitly(7,9).bigger)    println(new Pair_Implicitly_Ordered(7,9).bigger)  }}



1 0