我正在查看Scala Docs中的隐式类示例:
object Helpers {
implicit class IntWithTimes(x: Int) {
def times[A](f: => A): Unit = {
def loop(current: Int): Unit =
if(current > 0) {
f
loop(current - 1)
}
loop(x)
}
}
}
有人可以解释一下这种语法和功能吗?
times[A](f: => A)
答案 0 :(得分:3)
def times[A](f: => A): Unit
是函数签名,其中A
是泛型类型参数。它是未绑定,因此它可以是Any
'。
f: =>
是按名称参数。也就是说,在调用函数time
时不会计算f,而只在每次在time
内调用时才计算f。
This是一个关于按姓名呼叫的好帖子。
因此,在示例中,如果您的范围中有隐式类,则可以执行以下操作:
var count = 0
5 times { count += 1; println(count) }
并且会得到
1
2
3
4
5
作为输出。
答案 1 :(得分:1)
times
是一个多态函数,它接受单个类型参数A
和单个值参数f
。 f
是具有A
类型结果的函数。将另一个函数作为参数的函数称为高阶函数。
有关这些主题的更多信息: