Scala 之隐式转换函数(十)
2017-12-06 17:22
369 查看
隐式转换函数
定义:以implicit关键字声明
作用:丰富现有类库的功能,对类的方法进行增强
定义:以implicit关键字声明
作用:丰富现有类库的功能,对类的方法进行增强
package functionDemo /** * 隐式转换函数是指在同一个作用域下面, * 比如下面m1与m2函数在不进行转换之前只接收int类型,display默认只能接收string类型。 * 当添加了隐式转换函数后,在对m1与m2传入类似数字模式的string类型时, * 则自动调用将string类型转换成int,也就是说隐式函数会被方法自动进行隐式调用。 * 如下的display函数与其相关的隐式转换函数 * 一个给定输入类型并自动转换为指定返回类型的函数, * 这个函数和函数名字无关,和入参名字无关, * 只和入参类型以及返回类型有关。注意是同一个作用域。 * */ object ImplicitFunc { // 当只传入x参数时,则采用默认的y=10进行运算,如果传入两个参数则以传入的为参数为主 def m1(x: Int)(implicit y: Int = 10) = x * y def m2(x: Int)(z: Int)(implicit y: Int = 5) = x + y + z // 定义一个接收string类型的函数 def display(str: String) = println(str) // 对display方法进行隐式转换,让其可接受非string类型参数 implicit def tranInt2Str(x: Int) = (x * x).toString implicit def tranBoolean2Str(b: Boolean) = if (b) "true" else "false" //将String类型转换成int // implicit def tranStr2Int(str: String) = Integer.parseInt(str) //也可通过调用其他类中对应的方法,将String类型转换成int import ConstantFunc.tranStr2Int // 注意:像这里定义了一个将boolean类型的数据转换成str的函数,结果运行出错,那是因为上面也有同样效果的函数了,这时编译器会出现不知调用那个而抛出异常 // implicit def tranBoolean2Str2(b : Boolean) = if (b) "true" else "false" def main(args: Array[String]): Unit = { println("m1传一个参数:" + m1("2")) println("m1传两个参数:" + m1(10)(2)) println(m2("10")(90)) display(12) // 144 val flag: Boolean = true display(flag) // true } }
相关文章推荐
- scala隐式转换函数
- scala implicit关键字详解(隐式转换函数、隐式类、隐式参数、隐式值)
- Scala隐式转换之隐式转换函数
- scala学习笔记5 (隐式转化/参数/类)
- 快学Scala学习笔记及习题解答(21-22隐式转换和隐式参数、定界延续)
- Scala 隐式(implicit)详解
- 关于Scala的implicit(隐式转换)的思考
- scala implicit 隐式转换
- C++转换构造函数和隐式转换函数
- C++定义隐式转换函数,将类转换为内部的一个成员变量
- scala基础19-包/包对象/引入/隐式引入
- 第66讲scala 中伴生对象的隐式转换
- Scala入门到精通——第十八节 隐式转换与隐式参数(一)
- Scala入门之隐式转换与隐式参数
- 每天学一点Scala之implict 隐式参数
- scala进阶19-隐式转换内幕
- Scala多维数组、Java数组与Scala数组的隐式转换
- Scala中的隐式转换
- scala学习手记35 - 隐式类型转换
- scala学习之:隐式类与隐式对象