我对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
答案 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
,实际上意味着该方法不返回任何值