Scala隐式转换和隐式参数
一、隐式转换函数的底层原理
implicit def f1(d:Double):Int={
println("double-->int")
d.toInt
}
var a:Int=3.5
println(a)
补充(注意细节):
1)隐式转换函数的名字是任意的,隐式转换和函数名无关、和函数签名有关(参数列表-->返回值)
2)一个作用域内可以存在多个隐式函数、要保证当前环境下能被识别的隐式函数只能有一个,不能有二义性
二、隐式转换函数高级使用
需求:类MySql-->insert 开发完之后,发现缺少方法(delete方法)
解决方法:
1.修改源码(重新修改MySql)
2.动态混入 (OCP)
3.隐式转换 (OCP)
为什么要引入隐式转换、为了OCP(开闭原则)
好处:编码简洁(spark)
缺点:源码看不懂(存在隐式转换、10个类)
三、隐式值
案例一:
def main(args: Array[String]): Unit = {
test("B")
test()
test
//函数形参如果用implicit修饰了,那么调用函数的时候,
//可以不写小括号,默认用的就是隐式参数(形参)
}
def test(implicit name:String = "A"): Unit ={
println(</