scala之隐式转换和隐式参数

所谓隐式转换函数(implicit conversion function)指的是那种以implicit关键字声明的带有单个参数的函数。正如它的名称所表达的,这样的函数将被自动应用,将值从一种类型转换为另一种类

1.利用隐式转换丰富现有类库的功能

// 超人变身
class Man(val name:String)

class Superman(val name:String){
  def emitLaser = println("emit a laser")
}

object Man{
  def main(args: Array[String]): Unit = {
    implicit def man2superman(man:Man):Superman = new Superman(man.name)
    val leo = new Man("leo")
    leo.emitLaser
  }
}

2. 引入隐式转换

scala会考虑如下的隐式转换函数:

2.1 位于源或目标类型的伴生对象中的隐式函数

把int2Fraction函数,放到Fraction伴生对象中,这样它就能够被用来将整数转换成分数了。

// 把int2Fraction函数,放到Fraction伴生对象中,这样它就能够被用来将整数转换成分数了。
package scala

class Fraction(n:Int,d:Int){
  var num = n
  var den = d
  def *(other:Fraction) = new Fraction(num*other.num,den*other.den)
  override def toString: String = {
    this.num.toString+"/"+this.den
  }
}
object Fraction {
  implicit def int2Fraction(n:Int)=Fraction(n,1)
  def apply(n: Int, d: Int): Fraction = new Fraction(n, d)
  def main(args: Array[String]): Unit = {
    val a = Fraction(2,3)*Fraction(4,5)
    val b = 4*Fraction(3,4)
    println(a)
    println(b)
  }
}

4.隐式参数

猜你喜欢

转载自blog.csdn.net/qq_29573903/article/details/83272850