开发者学堂课程【Scala 核心编程-基础:隐式函数使用注意事项】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/609/detail/9007
隐式函数使用注意事项
隐式转换的注意事项和细节
1、隐式转换函数的函数名可以是任意的,隐式转换与函数名称无关,只与函数签名(函数参数类型和返回值类型)有关。
implicit def f1(d:Double): Int {
这里写了f1,Double,但是在编译器中它只看 Double 和 Int。F1写成 f2,d 写成 d1,都没关系,只跟函数签名有关。
2、隐式函数可以有多个(即:隐式函数列表),但是需要保证在当前环境下,只有一个隐式函数能被识别即匹配,就是不能有重复的。
如果要转换,再写一个函数,隐式函数可以写多个,必须要有一个匹配。多了也会报错。
//在当前环境中,不能存在满足条件的多个隐式函数
implicit def f2(f:Float): Int
={
f
.
toint
}
//这里我们必须保证隐式函数的匹配只能是唯一的
//implicit def f3(f:Float): Int={ 报错的原因不是因为参数名,参数名更换也会报错,因为在编译器中,它会很迷茫,它不是找一个就进行匹配,而是把一个文件当作整体进行编译。
//
f
.
toint
//}
Val
num :
Int
3.5
//底层编译 f1$1(3.5)
Val
num2 :
Int
4.5
f
f 是 Double 类型的跟 d:Double 并不匹配,提示转换不了。
println("num ="+ num)
}
}