Scala入门之隐式转换与隐式参数

1.隐式转换

    隐式转换是一项强大的程序语言功能,它不仅能够简化程序设计,也能够使程序具有很强的灵活性。
    隐式函数的名称对结构没有影响.函数可以是任何名字,只看参数与返回,也就是看能不能把传入的参数变成需要的类型就行了。
    隐式转换可以定义在目标文件当中,即隐式转换函数与目标代码在同一个文件当中,
也可以将隐式转换集中放置在某个包中,在使用时直接将该包引入即可,后者更常见。
    隐式转换发生的时间:
    1.当方法中参数的类型与实际类型不一致时
    2.当调用类中不存在的方法或成员时,会自动将对象进行隐式转换

2.隐式参数

在一般的函数据定义过程中,需要明确传入函数的参数,如果给函数定义隐式参数的话,则在使用时可以不带参数.

3.蘑菇云代码

package com.dtspark.scala.basics

/**
  * 人是如何变成超人的!
  */
/**
  *这是一个人。
  */
class Man(val name: String)
/*object Man{
  implicit def man2SuperMan(man: Man) = new SuperMan(man.name)
}*/
/**
  *这是一个超人,看他们之间是没有任何关系的
  */
class SuperMan(val name: String){
  //超人有超能力。
  def Superpowers = println("Wow,wow,wow," +  this.name +"  get a super natural power, will save the world now!!")
}

/**
  * 这是变身的条件
  */
object implicts{
  implicit def man2SuperMan(man: Man) = new SuperMan(man.name)
}
object HelloImplicits {
  def main(args: Array[String]): Unit = {
    println("=======隐式转换=========")
    import com.dtspark.scala.basics.implicts._
    //创建一个人出来
    val man = new Man("王大锤")
    //没有引入import com.dtspark.scala.basics.implicts._时这个人是不能使用超能力的。
    //所谓隐式转换就是把一个对象转换成另一个对象的过程,目的是调用另一个对象的方法
    man.Superpowers

    println("=======隐式参数=========")
    implicit val content = "Dollar"
    //talk要传入两个参数,第二个是隐式的,它会自己去找一个隐式的变量。
    //implicit val contentA = "wangdada"如果我这里再定义一个满足String要求的隐式变量,会找不到而报错。
    //隐式参数只看参数类型不管参数名称
    //mplicit val contentB = "gao"
    talk("Scala")

  }

  def talk(name: String)(implicit content:String) = println(name + " : " +content)
}

以上内容来自[DT大数据梦工厂]首席专家Spark专家王家林老师的课程分享。感谢王老师的分享,更多精彩内容请扫描关注[DT大数据梦工厂]微信公众号DT_Spark

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值