Scala Docs隐式类示例

时间:2015-09-18 18:14:57

标签: scala

我正在查看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) 

2 个答案:

答案 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和单个值参数ff是具有A类型结果的函数。将另一个函数作为参数的函数称为高阶函数。

有关这些主题的更多信息: