在笔记中
2 days ago 使用过隐式类型转换,这个功能很迷幻、很强大。
继续做个练习,回顾一下:
object IntArray2Int2 {
val x=Array(1,2,3)
//println(x+2) //Array的+这个方法参数为String类型,所以报错
val y=Array(4,5,6)
//println((x+y)) //同样报错,原因同上
println(x+"ABC") //[I@defa1aABC 每次运行结果不一
}
object IntArray2Int {
import ImplicitHelper.intarray2sum //可以这么导入隐式转换函数
//implicit def intarray2sum(ia:Array[Int]):Int=ia.reduceLeft(_+_) //或者使用直接声明的方式
def main(args:Array[String]):Unit={
val x=Array(1,2,3)
val y=Array(4,5,6)
println((x+y)) //21
//编译器试图在执行的上下文里找一个隐式函数,能够把Array对象转换成带有+方法的目标对象,预定义的隐式函数没有这个功能,自定义的intarray2sum可以,成功;
//执行的上下文:调用方法(main)所在的作用域(IntArray2Int、全局导入及局部导入);
}
}
object ImplicitHelper{
implicit def intarray2sum(ia:Array[Int]):Int=ia.reduceLeft(_+_)
}
下面再来一个练习:
class TestImplicit(val i:Int){
def +(t:TestImplicit)=println("+ an object..."+t.i)
def ~(t:TestImplicit)=println("~ an object..."+t.i)
}
object TestImplicit {
//前提:提供隐士转换函数,可以对参数和调用者(receiver)转换
//去掉int2Obj或者obj2Int,程序都不会报错,只是下面的转换形式稍有差异(略)
implicit def int2Obj(i:Int)=new TestImplicit(i)
implicit def obj2Int(o:TestImplicit)=o.i
implicit def double2Obj(d:Double)=new TestImplicit(d.toInt)
def main(args: Array[String]): Unit = {
val obj=new TestImplicit(3)
println(1+obj)//1和obj都有+方法,编译器尝试的是对参数转换
println(obj+1)//同上
println("----------cutting1-------------")
println(1~obj)//1没有~方法,对调用者(receiver)转换,即把1转换成目标对象
println(obj~1)//obj有~方法,对参数转换
println("----------cutting2-------------")
val d1:Double=1.0
val d2:Double=2.0
println(d1~d2)//d1与d2都没有~方法,对参数和调用者(receiver)同时转换
}
}
//-------console--------------------------------------->
4
+ an object...1
()//println的返回值
----------cutting1-------------
~ an object...3
()
~ an object...1
()
----------cutting2-------------
~ an object...2
()
分享到:
相关推荐
【课程大纲】第1讲-Spark的前世今生 共12页第2讲-课程介绍、特色与价值 共13页第3讲-Scala编程详解:基础语法 共8页第4...共13页第20讲-Scala编程详解:隐式转换与隐式参数 共9页第21讲-Scala编程详解:Actor入门 共8页
Scala中的隐式类型转换是Scala语言中的一种强大语言特性,可以自动进行某些数据类型的隐式转换。隐式类型转换可以分为两种:隐式参数和隐式转换。下面将对这两种类型进行详细的介绍。 一、隐式参数 隐式参数是指在...
【课程大纲】第1讲-Spark的前世今生第2讲-课程介绍、特色与价值第3讲-Scala编程:基础语法第4讲-Scala编程:...模式匹配第19讲-Scala编程:类型参数第20讲-Scala编程:隐式转换与隐式参数第21讲-Scala编程:Actor入门
`kafka-serde-scala` 库提供了一个方便的解决方案,它将Scala类型类编码器自动转换为Kafka的序列化器(Serializer)、反序列化器(Deserializer)以及Serde(序列化/反序列化器的组合)。这个库特别适用于那些希望在...
【课程大纲】第1讲-Spark的前世今生 共12页第2讲-课程介绍、特色与价值 共13页第3讲-Scala编程详解:基础语法 共8页第4...共13页第20讲-Scala编程详解:隐式转换与隐式参数 共9页第21讲-Scala编程详解:Actor入门 共8页
隐式转换是 Scala 中的一种机制,它允许开发者将一个类型转换到另一个类型。这种机制可以帮助开发者编写更加灵活的代码,例如将一个字符串转换到字节数组,或者将一个整数转换到有理数等。隐式转换可以通过使用 `...
在Scala中,隐式参数和隐式转换极大地增强了代码的简洁性和可读性,同时也为类型系统提供了更大的灵活性。 **隐式参数**: 在Scala中,我们可以定义带有`implicit`关键字的参数,这些参数被称为隐式参数。当一个...
Scala隐式转换和隐式参数.md
【课程大纲】第1讲-Spark的前世今生 共12页第2讲-课程介绍、特色与价值 共13页第3讲-Scala编程详解:基础语法 共8页第4...共13页第20讲-Scala编程详解:隐式转换与隐式参数 共9页第21讲-Scala编程详解:Actor入门 共8页
【课程大纲】第1讲-Spark的前世今生 共12页第2讲-课程介绍、特色与价值 共13页第3讲-Scala编程详解:基础语法 共8页第4...共13页第20讲-Scala编程详解:隐式转换与隐式参数 共9页第21讲-Scala编程详解:Actor入门 共8页
【课程大纲】第1讲-Spark的前世今生 共12页第2讲-课程介绍、特色与价值 共13页第3讲-Scala编程详解:基础语法 共8页第4...共13页第20讲-Scala编程详解:隐式转换与隐式参数 共9页第21讲-Scala编程详解:Actor入门 共8页
【课程大纲】第1讲-Spark的前世今生 共12页第2讲-课程介绍、特色与价值 共13页第3讲-Scala编程详解:基础语法 共8页第4...共13页第20讲-Scala编程详解:隐式转换与隐式参数 共9页第21讲-Scala编程详解:Actor入门 共8页
【课程大纲】第1讲-Spark的前世今生 共12页第2讲-课程介绍、特色与价值 共13页第3讲-Scala编程详解:基础语法 共8页第4...共13页第20讲-Scala编程详解:隐式转换与隐式参数 共9页第21讲-Scala编程详解:Actor入门 共8页
【课程大纲】第1讲-Spark的前世今生 共12页第2讲-课程介绍、特色与价值 共13页第3讲-Scala编程详解:基础语法 共8页第4...共13页第20讲-Scala编程详解:隐式转换与隐式参数 共9页第21讲-Scala编程详解:Actor入门 共8页
【课程大纲】第1讲-Spark的前世今生 共12页第2讲-课程介绍、特色与价值 共13页第3讲-Scala编程详解:基础语法 共8页第4...共13页第20讲-Scala编程详解:隐式转换与隐式参数 共9页第21讲-Scala编程详解:Actor入门 共8页
【课程大纲】第1讲-Spark的前世今生 共12页第2讲-课程介绍、特色与价值 共13页第3讲-Scala编程详解:基础语法 共8页第4...共13页第20讲-Scala编程详解:隐式转换与隐式参数 共9页第21讲-Scala编程详解:Actor入门 共8页
【课程大纲】第1讲-Spark的前世今生 共12页第2讲-课程介绍、特色与价值 共13页第3讲-Scala编程详解:基础语法 共8页第4...共13页第20讲-Scala编程详解:隐式转换与隐式参数 共9页第21讲-Scala编程详解:Actor入门 共8页
Scala的类型系统支持高级特性,如类型推断、类型参数、隐式转换等,为类型级编程提供了坚实的基础。 **压缩包子文件的文件名称列表:** "feature.scala-2.3.x"这个文件名暗示了这个实现是针对Scala 2.3.x版本的,...
【课程大纲】第1讲-Spark的前世今生 共12页第2讲-课程介绍、特色与价值 共13页第3讲-Scala编程详解:基础语法 共8页第4...共13页第20讲-Scala编程详解:隐式转换与隐式参数 共9页第21讲-Scala编程详解:Actor入门 共8页
【课程大纲】第1讲-Spark的前世今生 共12页第2讲-课程介绍、特色与价值 共13页第3讲-Scala编程详解:基础语法 共8页第4...共13页第20讲-Scala编程详解:隐式转换与隐式参数 共9页第21讲-Scala编程详解:Actor入门 共8页