您的位置:首页 > 其它

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

2016-08-07 23:11 323 查看

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  scala