试图了解这种scala表示法

时间:2019-05-03 19:28:40

标签: scala

我对Scala还是陌生的,而在尝试理解Scala中的隐式时,我很难理解 [A](f:=> A)部分。有人可以解释一下吗?

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)
}

} }

这被称为:

scala> import Helpers._
import Helpers._

scala> 5 times println("HI")
      HI
      HI
      HI
      HI
      HI

参考:https://docs.scala-lang.org/overviews/core/implicit-classes.html

1 个答案:

答案 0 :(得分:4)

我们来看一下这个方法声明:

def times[A](f: => A): Unit
  • def:用于定义方法的关键字
  • times:方法名称
  • [A]:一个名为A的 type参数。这意味着该方法采用的type参数可以显式(例如,通过调用times[Int](...))或隐式(在调用方法时调用times(...)并让编译器推断类型)。有关更多详细信息,请参见https://docs.scala-lang.org/tour/polymorphic-methods.html
  • (f: => A):这些是方法的“值参数”,在这种情况下,恰好有一个类型为f的名为A的此类参数(这是我们拥有的类型参数宣布!)。 =>表示此参数是姓名呼叫参数,请参见https://docs.scala-lang.org/tour/by-name-parameters.html
  • : Unit:这是方法的返回类型-定义为Unit,实际上意味着该方法不返回任何值