一:
1.隐式转换概述:
隐式转换与模式匹配都是scala中提供的比较强大的特性。
2.隐式转换的定义:
在实际编程中,要想把一个不匹配的类型赋值,需要先转换成匹配的类型。scala的隐式转换会自动将一种类型的数据转换成另一种类型。隐式转换就是scala自动转换。对于户编程而言不可见,不需要手动编写转换代码。
3.scala隐式转换声明
scala的隐式转换声明关键字为implicit
package test10
object test10_4 {
class StrongString(str: String) {
def isPhone(str: String): Boolean = {
val reg = "1[3-9]\\d{9}".r
reg.matches(str)
}
def isEmail:Boolean={
val reg="r"
reg.matches(str)
}
}
implicit def strongString(str:String):StrongString ={
new StrongString(str)
}
def main(args: Array[String]): Unit = {
val str: String = "13239612335"
//需求:给字符串补充一个功能,isPhone。判断它是不是一个手机号码
val rs = str.isPhone
// val rs = (new StrongString(str)).isPhone
// val rs = stringtoStrongString(str).isPhone
println(s"$str 的检查结果是:$rs")
}
}
package test10
//隐式值
object test10_3 {
//函数的默认参数
//函数的默认参数:小花
def sayName(implicit name:String="小花"):Unit ={
println(s"我叫:$name")
}
//需求更 改函数的默认值(不传入这个值的时候,用到的值),不要写死
//步骤:
//1.定义函数的默认参数时,添加implicit
//2.需要修改这个默认值时,定义一个同类型的隐式值:implicit 修改变量
implicit val xxx: String = "小明明"
// implicit val defaultValue:String="小明"
def main(args: Array[String]): Unit = {
sayName("无敌小旋风")
sayName
sayName//小明
}
}
package test10
//潜规则:老代码不要改!!!可以加新代码
object test10_2 {
//小明
def getAge():Double ={
19.5
}
//implicit 隐式转换
//函数名字不重要
//重要的是:参数类型和返回值类型!!!
//隐式函数:implicit修饰的函数
//特点:1.自动被调用 2.函数名字不重要,重要的是,参数类型和返回值类型!
implicit def abc(d:Double):Int ={
d.toInt
}
//小花
def main(args: Array[String]): Unit = {
// val i :Int = doubleToInt(getAge())
val i:Int = getAge()
println(i)
}
}
package test10
object test10_5 {
class StrongString(val str:String){
def isPhone():Boolean={
val reg = "1[3-9]\\d{9}".r
reg.matches(str)
}
//验证是否身份证号
def isID:Boolean ={
val reg ="".r
reg.matches(str)
}
}
//定义一个特殊的转换函数,把str ===> StrongString的对象
implicit def xxxx(str:String):StrongString ={
// println("偷偷调用implicit")
new StrongString(str)
}
def main(args: Array[String]): Unit = {
println("136a".isPhone())
}
}