暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

每日一课:隐式转换函数

Scala学习 2016-03-10
663

在前一小节中,我们提到Scala默认已经帮我们实现了大量的隐式转换函数,在特定情况下会自动调用相应的隐式转换函数完成隐式转换,从而保证程序的顺利执行。但Scala提供的隐式转换函数数量毕竟是有限的,不可能满足实际应用,此时需要定义自己的隐式转换函数,例如Scala已经帮我们实现了Int类型到Float类型的隐式转换函数:

implicit def int2float(x: Int): Float = x.toFloat

现在如果我们想要完成Float类型到Int类型转换的话,则需要定义相应的隐式转换函数,具体代码如下:

//直接将Float对象赋值给Int类型变量会报错

scala> val intValue:Int=2.55f

<console>:7: error: type mismatch;

 found   : Float(2.55)

 required: Int

       val intValue:Int=2.55f

                        ^

//定义一个隐式转换函数,该隐式转换函数将Float类型转换成Int类型(注意函数的输入参数)

scala> implicit def float2int(x:Float)=x.toInt

float2int: (x: Float)Int

 

//再次将Float类型对象赋值给Int类型变量时,程序运行通过

scala> val intValue:Int=2.55f

intValue: Int = 2

定义完成隐式转换函数implicit deffloat2int(x:Float)=x.toInt后,valintValue:Int=2.55f语句便能够顺利通过的原因是:编译器发现赋值对象的类型与最终类型不匹配时,会在当前作用域范围内查找能够将Float类型转换成Int类型的隐式转换函数,隐式转换函数float2int正好满足要求,从而程序可以正常运行。而未定义该隐式转换函数之前,valintValue:Int=2.55f会出错,是因为在当前作用域中找不到Float类型到Int类型的隐式转换函数。





Scala学习(公众微信号:ScalaLearning)每天为大家带来一点Scala语言、Spark、Kafka、Flink、AKKA等大数据技术干货及相关技术资讯

技术永无止境,勇攀高峰,一往直前!



觉得文章不错?扫描关注



文章转载自Scala学习,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论