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
    }
}
相关推荐
Jay_5157 分钟前
C++多态与虚函数详解:从入门到精通
开发语言·c++
路来了9 分钟前
Python小工具之PDF合并
开发语言·windows·python
xiaolang_8616_wjl1 小时前
c++文字游戏_闯关打怪
开发语言·数据结构·c++·算法·c++20
WJ.Polar1 小时前
Python数据容器-list和tuple
开发语言·python
FrostedLotus·霜莲1 小时前
C++主流编辑器特点比较
开发语言·c++·编辑器
超级码.里奥.农1 小时前
零基础 “入坑” Java--- 七、数组(二)
java·开发语言
KENYCHEN奉孝2 小时前
Rust征服字节跳动:高并发服务器实战
服务器·开发语言·rust
挺菜的2 小时前
【算法刷题记录(简单题)002】字符串字符匹配(java代码实现)
java·开发语言·算法
妮妮喔妮3 小时前
【无标题】
开发语言·前端·javascript
fie88893 小时前
浅谈几种js设计模式
开发语言·javascript·设计模式