scala中 隐式转换

一、

隐式转换: 编译器 偷偷地,自动地帮我们把一种数据类型转换为另一种类型

例如: int --> double

Scala 复制代码
object test {
    // 复习隐式转换
    // 隐式转换: 编译器 偷偷地,自动地帮我们把一种数据类型转换为另一种类型
    //         例如: int --> double
    // 它有失败的时候 (double ---> int), 有成功的时候
    // 当它转换失败的时候,我们提供一个工具,让它能成功

    // 明确地,把double转成int
    implicit def X(d:Double): Int = {
        d.toInt
    }

    def main(args: Array[String]): Unit = {
        var i:Int = 1
        var j:Double - 2.1

        i = j // 把double 转入 Int
        // j = 1 // 把Int 转入 Double
        println(i)
    }
}

二、

Scala 复制代码
object test1 {
    // 开始你的代码1
    class StrongString(val str:String) {
        def isPhone(): Boolean = {
            val reg = "1[3-9]\\d{9}".r
            reg.matches(str)
        }
    }
    // 定义一个特殊的转换函数,把str ===> StrongString的对象
    def tranform(str:String):StrongString = {
        new StrongString(str)
    }


    def main(args: Array[String]): Unit = {
        val str = "13612345678"
//        println(isPhone(str))
//        println(isPhone("abc"))
//        println( (new StrongString(str)).isPhone() )
        println( tranform("abc").isPhone() )
        println(str.isPhone())  //  ==> true
        println("136a".isPhone())  // ==> false
    }
}

以下是使用隐式函数更正后的 Scala 代码,主要思路是通过定义隐式转换函数,让普通的String类型能够自动转换为StrongString类型,这样就可以直接在String上调用isPhone方法了,代码如下:

Scala 复制代码
object test1 {
    // 定义StrongString类,用于封装字符串并提供判断是否为手机号的方法
    class StrongString(val str: String) {
        def isPhone(): Boolean = {
            val reg = "1[3-9]\\d{9}".r
            reg.matches(str)
        }
    }

    // 定义隐式转换函数,将String类型隐式转换为StrongString类型
    implicit def stringToStrongString(str: String): StrongString = {
        new StrongString(str)
    }

    def main(args: Array[String]): Unit = {
        val str = "13612345678"
        // 这里可以直接在String类型的变量上调用isPhone方法,得益于隐式转换
        println(str.isPhone())
        println("136a".isPhone())
    }
}

三、校验自己的手机号

Scala 复制代码
package test38
// 需求1:
// 完成一个功能,让所有的字符串都能调用isPhone方法,来校验自己是不是一个手机号
object test1 {
    // 开始你的代码
    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)
        }
    }
    // 定义一个特殊的转换函数1,把str ===> StrongString的对象
    implicit def xxxx(str: String): StrongString = {
    // println("偷偷调用implicit")
        new StrongString(str)
    }
    def main(args: Array[String]): Unit = {
        println("1136a".isPhone()) // ==> false
    }
}
相关推荐
程序员JerrySUN24 分钟前
每天设计者模式-1:基础面试题
java·linux·运维·服务器·开发语言·python·docker
和光同尘@36 分钟前
56. 合并区间 (LeetCode 热题 100)
c语言·开发语言·数据结构·c++·算法·leetcode·职场和发展
软件黑马王子39 分钟前
C#初级教程(1)——C# 与.NET 框架:探索微软平台编程的强大组合
开发语言·c#
johnrui1 小时前
java8Optional 使用
java·开发语言
zh路西法1 小时前
【C++委托与事件】函数指针,回调机制,事件式编程与松耦合的设计模式(上)
开发语言·c++·观察者模式·设计模式
闲猫1 小时前
go 网络编程 websocket gorilla/websocket
开发语言·websocket·golang
终极定律2 小时前
qt:输入控件操作
开发语言·qt
JenKinJia2 小时前
Windows10配置C++版本的Kafka,并进行发布和订阅测试
开发语言·c++
煤炭里de黑猫2 小时前
Lua C API :lua_insert 函数详解
开发语言·lua
笨鸟笃行2 小时前
爬虫第七篇数据爬取及解析
开发语言·爬虫·python