Scala隐式参数、隐式函数和隐式类

隐式参数

方法可以具有隐式参数列表,由参数列表开头的implicit关键字标记

  • implicit只能修改最尾部的参数列表,应用于其全部参数
  • Scala可自动传递正确类型的隐式值
  • 通常与柯里化函数结合使用
def sum(x:Int)(implicit y:Int)=x+y
implicit var a=10	//将作为Int类型隐式值自动传递
sum(10)	//20

示例

object test {
object test {
  def main(args: Array[String]): Unit = {
    implicit var a:Int=10
    implicit var b:String="hello"
    def test1(a:Int,b:Int)(implicit c:Int):Int={
      a+b+c
    }
    def test2(a:Int,b:Int)(implicit c:Int=5,str:String):Int={
      println(str)
      a+b+c
    }
    println(test1(10,10))
    println(test1(10,10)(20))
    println(test2(10,10)(30,"hi"))
  }
}
//优先级:传参>隐式参数>默认

隐式函数

隐式函数也称隐式转换,使用implicit修饰的函数
应用场景

  • 类型转换
implicit def double2Int(x:Double)=x.toInt
val i:Int=3.5

类型增强

implicit def bool2Int(x:Boolean)=if(x) 1 else 0
println(1+true)

隐式类

隐式转换

  • 隐式转换、隐式函数
  • 隐式类:用implicit关键字修饰的类,其主构造器可用于隐式转换

只能在类、Trait、对象(单例对象、包对象)内部定义
构造器只能携带一个非隐式参数
隐式类不能是case class
在同一作用域内,不能有任何方法、成员或对象与隐式类同名

隐式类应用

为String对象增加新的方法

object Stringutils {
  implicit class StringImprovement(val s:String){//隐式类
  def increment=s.map(x=>(x +1).toChar)
  }
}
object Main extends App{
  import Stringutils._
  println("mobin".increment)	//输出:npcjo
}

示例

隐式类的使用,与Demo相关的隐式类要全部在Impliciteg中
创建好Demo对象中,虽然Demo中没有一个方法,但是因为隐式类中是有好多方法的,所以Demo对象后就可以使用这些方法
隐式类的主要作用就是:类对象中没有的方法可以直接被类对象调用

Impliciteg

package packagetwo

object Impliciteg {
//类的主构造器
implicit class a(demo: Demo){
  def jia(a:Int,b:Int):Int={
    a+b
  }
  def jian(a:Int,b:Int):Int={
    a-b
  }
  def chen(a:Int,b:Int):Int={
    a*b
  }
  def chu(a:Int,b:Int):Int={
    a/b
  }
}
}
package packagetwo

import packagetwo.Impliciteg._

class Demo {

}
object Demo{
  def main(args: Array[String]): Unit = {
    val dm=new Demo
    var jiaResult=dm.jia(10,10)
    var jianResult=dm.jian(10,10)
    var chenResult=dm.chen(10,10)
    var chuResult=dm.chu(10,10)
    println(jiaResult)
    println(jianResult)
    println(chenResult)
    println(chuResult)
  }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值