以下是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")
}
}
答案 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"))