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
    }
}
相关推荐
郑州光合科技余经理4 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
feifeigo1234 天前
matlab画图工具
开发语言·matlab
dustcell.4 天前
haproxy七层代理
java·开发语言·前端
norlan_jame4 天前
C-PHY与D-PHY差异
c语言·开发语言
多恩Stone4 天前
【C++入门扫盲1】C++ 与 Python:类型、编译器/解释器与 CPU 的关系
开发语言·c++·人工智能·python·算法·3d·aigc
QQ4022054964 天前
Python+django+vue3预制菜半成品配菜平台
开发语言·python·django
遥遥江上月4 天前
Node.js + Stagehand + Python 部署
开发语言·python·node.js
m0_531237174 天前
C语言-数组练习进阶
c语言·开发语言·算法
Railshiqian4 天前
给android源码下的模拟器添加两个后排屏的修改
android·开发语言·javascript
雪人不是菜鸡4 天前
简单工厂模式
开发语言·算法·c#