1、定义一个普通变量,使用 implicit 关键字修饰,定义一个函数调用这个变量当参数时,此时这个参数就被称为隐式参数 2、隐式参数的作用:减少提供函数参数的数量,让某些参数拥有隐藏的值(隐式变量)
注:
1、这里定义的变量名是 a,但是传入到函数当中,隐式参数名可以不为 a,随便起什么名字都可以,只要是 Int 类型就可以2、在一个类中,定义同一类型的隐式参数只能有一个,即函数参数列表中同一类型的隐式参数也只能为一个,多了会打架,比如定义了两个Int类型的变量当参数,implicit val a:Int = 10, implicit val b:Int = 20 ,传入到函数中scala编译就不知道用哪个参数了3、在一个类中,不同类型的隐式参数可以传入到函数当中4、scala中函数的传参级别: 函数列表传参 > 隐式参数 > 默认值1、隐式函数也称隐式转换,使用implicit修饰的函数 2、作用:可以通过一个隐式函数将一种类型转变为另一种类型
3、隐式转换有两种应用场景:
a)类型转换,隐式转换为期望类型b)类型增强在scala中定义一个隐式函数,函数体是将传入的 Double 类型使用 toInt 方法转为 Int 类型
def main(args: Array[String]): Unit = { //隐式函数 //类型转换:Double --> Int implicit def DoubleToInt(a: Double) = {a.toInt} //定义隐式函数 val x: Int = 3.5 //写的时候scala就调用了隐式函数 doubleToInt 进行类型转化 println(x) }常用的类型转换:
implicit def doubleToString (obj:Double):String=obj.toString implicit def intToString(obj:Int):String=obj.toString implicit def stringToInt(obj:String):Int=Integer.parseInt(obj)定义一个隐式函数,使 “true=1,false=0” ,此时便可提供一个隐式函数,使得Int+Boolean成立
def main(args: Array[String]): Unit = { //隐式函数 //类型增强 implicit def BooleanToInt(x:Boolean) = if(x) 1 else 0 println(1+true) println(1+false) }注: 隐式转换的发生时机
1、当方法中的参数的类型与目标类型不一致时2、当对象调用类中不存在的方法或成员时,编译器会自动将对象进行隐式转换1、隐式类指的是用implicit关键字修饰的类。 2、在对应的作用域内,带有这个关键字的类的主构造函数可用于隐式转换。
参考博客:https://blog.csdn.net/and52696686/article/details/107618593
