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
    }
}
相关推荐
quantdash_cc3 小时前
从实时行情到价格观察表:用 Python 和 Pandas 构建策略输入数据
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
昂好的day4 小时前
VisionMaster 通信模块实战(上):Modbus、TCP 收发、协议组装解析
开发语言·网络·网络协议·tcp/ip·c#
努力实干4 小时前
面向对象设计原则——C++
开发语言·c++·数码相机
NetX行者6 小时前
四语言 Hello World 背后:编译模型与运行时对比
开发语言
Pin_Qing7 小时前
账单没超,请求先被拒了
大数据·开发语言·人工智能
2601_962885727 小时前
如何用 Python 计算 VaR 和 CVaR(在险价值)?
开发语言·python
郝亚军7 小时前
manifest 中 `sha256` 与 `signValue` 的作用
java·开发语言·数据结构
譕痕7 小时前
stripe 实例
java·开发语言·stripe·checksession
墨子夕8 小时前
设计模式——Java × Python 双语言精讲 · 23 个经典模式 + 现代演进(前言篇)
java·开发语言·设计模式
_菜鸟果果8 小时前
高德地图 JS API 2.0 在国产 Linux/ARM 电脑上渲染失败 的排查与解决
linux·开发语言·javascript