您的位置:首页 > 其它

Scala 之隐式转换函数(十)

2017-12-06 17:22 369 查看
隐式转换函数

定义:以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