scala隐式参数的应用

scala在定义方法时可以定义隐式参数,同时再给隐式参数设定默认值。在调用此方法时可以不需要传入隐式参数的实参,然而隐式参数依然会起作用。这看上去调用方法变得很简洁。

隐式参数的应用涉及3个步骤:

1、在方法的定义中的参数前要有implicit关键词,并且函数的定义方式是柯里化的。

2、在另一个object中定义隐式参数的默认值。其实简单点的话也可以直接在方法定义隐式参数后面直接赋默认值而不必另外再定义一个object来处理隐式参数的默认值。

3、在调用方法前先import这个object中的内容进来,然后调用方法。调用方法不必传入隐式参数的实参。

以下是代码例子:

package demo.classtest



object ImplicitParameterDemo {

  case class Remote(address: String)

  case class Home(address: String)



  object Transportation {

    /**

      * 如果在方法中定义了隐式参数,在调用方法时可以不必显式传入隐式参数。

      * @param transportTools

      * @param remote1

      * @param home1

      */

    def transport(transportTools: String)(implicit remote1: Remote, home1: Home) = {

      println(s"To celebrate spring festival, go from $remote1 to $home1 by $transportTools")

    }

  }



  object Address {

    //在此object中定义的隐式变量一定要和transport方法中的隐式参数类型相对应,对应是指类型要匹配而不是变量名匹配。

    //此处的定义便是对transport方法中的隐式参数进行初始化默认值。

    implicit val remote = new Remote("Shanghai")

    implicit val home = new Home("BeiKing")

  }



  object GoHome {

    import Address._



    /**

      * 这边调用transport方法并未传入隐式参数,这是合法的。隐式参数的默认值在Address对象中有定义。

      * 所以在调用此方法之前一定要先导入Address对象中的所有内容过来。

      * 调用此方法时如果没有显式传入隐式参数,scala会自动去找隐式参数对应的默认值。

      */

    Transportation.transport("AirPlane")

  }



  def main(args: Array[String]): Unit = {

    GoHome

  }

}


运行结果:

To celebrate spring festival, go from Remote(Shanghai) to Home(BeiKing) by AirPlane

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值