Scala--隐式参数

来源:互联网 发布:生物统计分析软件 编辑:程序博客网 时间:2024/05/20 07:51

A method with implicit parameters can be applied to arguments just like a normal method. In this case the implicit label has no effect. However, if such a method misses arguments for its implicit parameters, such arguments will be automatically provided.

如果有参数, 那么会自动使用, 如果没有, 你也可以显示地传递

//通过输入购物金额, 结合当前域中的隐式参数来计算税费def calcTax(amount:Float)(implicit rate: Float): Float = {  amount * rate}//创建一个独立的域测试{  //1,显式输入, 不使用隐式参数  calcTax(3000)(0.08F)}{  //2,使用隐式参数, 参数的作用域只是在当前大括号中有效  implicit val rate = 0.04F  calcTax(3000)}

这里写图片描述

使用作用域来限制隐式参数在某一个区域中, 在需要的时候, 直接引入

//通过输入购物金额, 结合当前域中的隐式参数来计算税费def calcTax(amount:Float)(implicit rate: Float): Float = {  amount * rate}//当计算简单的消费税时候, 引入该变量object SimpleStateSalesTax {  implicit val rate: Float = 0.08F}//在一个单独的域中测试{  //引入变量, 一个域中仅能有一个变量  import SimpleStateSalesTax.rate  val amount = 3000F  println(s"Tax on $amount = ${calcTax(amount)}")}

这里写图片描述

//通过输入购物金额, 结合当前域中的隐式参数来计算税费def calcTax(amount:Float)(implicit rate: Float): Float = {  amount * rate}//当计算简单的消费税时候, 引入该变量object SimpleStateSalesTax {  implicit val rate: Float = 0.08F}//在一个单独的域中测试{  //引入变量, 一个域中仅能有一个变量  import SimpleStateSalesTax.rate  val amount = 3000F  println(s"Tax on $amount = ${calcTax(amount)}")}/*在休假的时候免税, 在不同的地方收不同的附加税*///复杂税费的数据保存类, 使用case类case class ComplicatedSalesTaxData(  baseRate: Float,          //基础税率  isTaxHoliday: Boolean,    //是否是免税日  storeId: Int)             //店铺的id, 当地的附加税object ComplicatedSalesTax {  //根据店铺号码计算附加税率  private def extraTaxRateForStore(id:Int):Float = {    if(id<1000) 0.1F      //附加税率为0.1    else 0.15F            //附加税率为0.15  }  //根据一个纳税数据体, 计算税率  implicit def rate(implicit cstd: ComplicatedSalesTaxData):Float = {    //免税期    if(cstd.isTaxHoliday) 0.0F    //基础税率, 加上附加税率    else cstd.baseRate + extraTaxRateForStore(cstd.storeId)  }}{  import ComplicatedSalesTax.rate  implicit val myStore = ComplicatedSalesTaxData(0.06F, false, 1200)  val amount = 3000  calcTax(amount)}
原创粉丝点击