隐式参数出体验

参考文献
scala 深入浅出实战经典 . 王家林
场景
隐式参数出的基本概念
实验

package com.scode.scala
import java.io.File
import 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)
  }
}



你可能感兴趣的:(隐式参数出体验)