Scala中的隐式类

时间:2016-11-30 01:45:29

标签: scala

以下是Scala Implicit Class的示例程序:

object Run {
   implicit class IntTimes(x: Int) {
      def times [A](f: =>A): Unit = {
         def loop(current: Int): Unit =

         if(current > 0){
            f
            loop(current - 1)
         }
         loop(x)
      }
   }
}

还有一个类叫做#34; 4 times println("hello")"如下,但我无法理解" 4 times println("hello")"意思?

object Demo {
   def main(args: Array[String]) {
      4 times println("hello")
   }
}

2 个答案:

答案 0 :(得分:7)

4 times println("hello")大致转化为:

val c = new IntTimes(4)
c.times(println("hello"))

也就是说,因为有一个隐式类以Int为唯一参数,使用方法times,所以4.times隐式实例化以4为参数的类,并且然后在其上调用times

答案 1 :(得分:5)

我还发现这种示例方法过于复杂,无法演示隐式类。

简而言之,隐式类会使用新的方法和属性覆盖其他类。

在此示例中,它重写Int来为其指定方法时间。 times方法采用具有通用返回类型的call-by-name参数:

def times [A](f: =>A): Unit

手段f是一个返回通用类型A的函数。

使用按名字调用变量时,它将调用该函数并成为返回值。 内部时间方法是使用递归循环f的调用被调用整数的次数。

在Scala中,您可以使用点或空格来调用方法,而无需使用括号将参数, 因此object.method(param1, param2)可能是object method param1 param2

因此,最终通话4 times println("hello") 实际上是4.times(println("hello"))