隐式参数出体验
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)
}
}
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)
}
}
相关文章推荐
- 块级元素与行内元素区别
- 隐式类与隐式对象初体验
- 2013年山东省第四届ACM大学生程序设计竞赛-Alice and Bob (找规律+二进制)
- 磁盘容量计算
- 专家解读两会新精神:五大关键词对中国很重要
- 一次虚拟机ping不通的问题---ifcfg-eth0中的prefix设置错误
- 使用Objective-C 计算代码运行时间
- reset清零css记录
- Inode详解-重要
- 云计算产值将超3000亿美元 亚马逊微软谷歌居三甲
- ASP.NET 开发人员不必担心 Node 的五大理由
- LeetCode Verify Preorder Sequence in Binary Search Tree
- FreeBSD是UNIX系统的重要分支,其命令与Linux大部分通用,少部分是其特有。
- mybatis3有感
- 动手实践 Linux VLAN - 每天5分钟玩转 OpenStack(13)
- mybatis2有感
- 动手实践 Linux VLAN - 每天5分钟玩转 OpenStack(13)
- COGS 2188. [HZOI 2015] Math 题解
- Oracle 迁移到 Mycat 简单测试
- mybatis1有感