/**
scala的隐式转换机制
知识点
1.scala implicit关键字用于定义隐式方法、隐式类、隐式对象
2.隐式转换的作用:当一个转换不合法时,在当前的作用域能够找到对应的隐式转换,使得转换合法
3.定义隐式转换方法时,方法名自定义,但参数列表只能有一个
4.隐式转换不能存在二义性,即在同一作用域中,只有存在一种类型转换
5.通过隐式类,可以让用户灵活的自定义和扩充方法。注意:定义隐式类时,主构造器的参数只能有一个
*/
object Demo {
println("Welcome to the Scala worksheet") //> Welcome to the Scala worksheet
val v1=100 //> v1 : Int = 100
//显式类型转换。格式固定:to指定类型
val v2:String=v1.toString() //> v2 : String = 100
//一、定义一个隐式转换方法
implicit def f1(x:Int)={x.toString()} //> f1: (x: Int)String
val v3:String=v1 //> v3 : String = 100
//二、隐式类
implicit class AuthMethod(x:String){
def suffix()={
x.takeRight(4)
}
def prefix()={
x.dropRight(4)
}
}
val s1="fil01.txt" //> s1 : String = fil01.txt
//调用suffix方法,获取文件名的后缀
s1.suffix //> res0: String = .txt
s1.prefix //> res1: String = fil01
//三、隐式对象
trait Adder[T]{
def add(x:T,y:T):T
}
def f2(a:Int,b:Int)(implicit adder:Adder[Int])={
adder.add(a,b)
} //> f2: (a: Int, b: Int)(implicit adder: Demo10.Adder[Int])Int
f2(2,3)(new Adder[Int]{
def add(x:Int,y:Int)={x+y}
}) //> res2: Int = 5
//隐式对象
implicit val a=new Adder[Int]{
def add(x:Int,y:Int)={x+y}
} //> a : Demo10.Adder[Int] = Demo10$$anonfun$main$1$$anon$2@7f63425a
f2(2,3)(a) //> res3: Int = 5
f2(2,3) //> res4: Int = 5
}
Scala学习-7.隐式转换机制
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 写在最前 本次分享一下通过ES5规范来总结如何准确的计算“==”的执行结果。由于规范是枯燥无味的,所以作者试图总结...
- 前言:【从零开始学习YOLOv3】系列越写越多,本来安排的内容比较少,但是在阅读代码的过程中慢慢发掘了一些新的亮点...
- 本文来自《Programming in Scala》一书 scala学习之隐式转换和隐式参数 1 隐式类型转换 ...