您的位置:首页 > 其它

隐式参数出体验

2016-03-28 07:26 309 查看
参考文献
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)
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: