Scala中的隐式类

6 scala

下面是Scala Implicit类的示例程序:

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)
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

还有一个类称为" 4 times println("hello")"如下,但我无法理解" 4 times println("hello")"是什么意思?

object Demo {
   def main(args: Array[String]) {
      4 times println("hello")
   }
}
Run Code Online (Sandbox Code Playgroud)

Buh*_*uhb 7

4 times println("hello") 大致翻译成:

val c = new IntTimes(4)
c.times(println("hello"))
Run Code Online (Sandbox Code Playgroud)

也就是说,因为有一个隐式类将一个Intas作为唯一的参数,使用一个方法times,4.times隐式实例化以4为参数的类,然后对其进行调用times.


Jas*_*onY 6

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

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

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

def times [A](f: =>A): Unit
Run Code Online (Sandbox Code Playgroud)

意味着f是一个返回泛型A的函数。

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

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

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