Scala的隐式对象和隐式类(二)

18 阅读1分钟

案例:验证字符串是否手机号

使用隐式类,给字符串添加一下新功能:验证当前字符串是否是手机号码。使用的格式如下:"13612345678".isPhone()

/*
* 需求:
*    让所有的字符串都具备一个功能:检查自己是不是一个合法的手机号?
*
*  1. 目前的字符串类是没有这个功能的。
*
*  2. 拓展String这个类
* */

object imp6 {

  // 让所有的String对象,都有了一个新的方法 isPhone!
  implicit class StrongString(s:String) {
    def isPhone():Boolean = {
      val reg = "^1[356789]\d{9}$".r
      reg.matches(s)
    }
  }


  def main(args: Array[String]): Unit = {
    val str = new String("13612345678")

    var str1 = "abaadsfsdfs"

    // 判断自己是否是一个手机号
    if(str1.isPhone){
      println(s"${str1}是手机号")
    } else {
      println(s"${str1}不是手机号")
    }
  }
}

案例:计算阶乘

需求说明:给一个所有的整数添加一个功能,例如:3!=321。

println(3!) // 输出6

思路分析:与上面的增强版字符串一样,我们这的整数是增强版的整数。

import scala.language.postfixOps
object imp7 {

  implicit class StrongString(n:Int) {
    def !():Int = {
      // println("阶乘......")
      var s = 1
      for(i <- 1 to n){
        s *= i
      }
      s
    }
  }


  def main(args: Array[String]): Unit = {
    var k = 5;  // 5 * 4 * 3 * 2 * 1

    // 计算k的阶乘
    printf(s"${k}的阶乘是:${k!}")
  }
}