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)
4 times println("hello")
大致翻译成:
val c = new IntTimes(4)
c.times(println("hello"))
Run Code Online (Sandbox Code Playgroud)
也就是说,因为有一个隐式类将一个Int
as作为唯一的参数,使用一个方法times
,4.times
隐式实例化以4为参数的类,然后对其进行调用times
.
我还发现这种示例方法过于复杂,无法演示隐式类。
简而言之,隐式类会使用新的方法和属性覆盖其他类。
在此示例中,它重写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"))
归档时间: |
|
查看次数: |
3351 次 |
最近记录: |