Scala中隐式值、隐式转换和例题

//隐式值
object jdfslfjiepo {
  //函数默认参数
  //函数默认参数值:小花
  def sayName(implicit name: String = "小花"): Unit = {
    println(s"我叫: $name")
  }

  //需求:更改函数参数的默认值(不传入这个值的时候,用到的值),不要写死
  //步骤:
  //  1.定义函数的默认参数时,添加implicit
  //  2.需要修改这个默认值时,定义一个同类型的隐式值:implicit 修饰变量

  implicit val defshdj:String="夏天"


  def main(args: Array[String]): Unit = {
    sayName("xiaofei")

    sayName

    sayName
  }

//隐式转换 implicit
//隐式转换:编译器自动滴,偷偷滴,把数据类型从A->B
//有可能会成功,也可能会失败

object jdslkdl {
//  def main(args: Array[String]): Unit = {
//    val i:Int=1
//    //把Int类型,转换成Double类型
//    //Int->Double
//    val b:Double=i
//
//    //隐式转换失败
//    val d:Double=1.2
//    val j:Int=d
//  }
def getAge():Double={
19.5
}
  //implicit 隐式转换
  //函数名不重要
  //重要的是:参数类型和返回值类型!!

  //隐式函数:implicit修饰的函数
  //特点:1。自动被调用 2.函数名字不重要,重要的是:参数类型和返回值类型
  implicit def abc(d:Double):Int={
    d.toInt
  }
def main(args: Array[String]): Unit = {
//val i:Int=abc(getAge())
  val i:Int=getAge()
  println(i)
}

object jhfhjkd {
  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)
    }
  }
  //定义一个特殊的转换函数,把str===>StrongString的对象
  implicit def xxxx(str:String):Strongstring={
//    println("偷偷调用implicit")
    new Strongstring(str)
  }
  def main(args: Array[String]): Unit = {
    println("136a".isPhone())//==》false
//    val str:String="13238876400"

    //需求:给字符串补充一个功能isPhone,判断它是不是一个手机号码
//    val rs=str.isPhone
//    val rs=(new Strongstring(str)).isPhone
//    val rs=stringtoStrongString(str).isPhone
//    println(s"$str 的检查结果是:$rs")

  }

你可能感兴趣的:(scala,java,开发语言)