【发布时间】:2019-11-25 15:58:08
【问题描述】:
我对下面的 scala'a 隐式转换代码块有点困惑。
object Run {
implicit class IntTimes(x: Int) {
def times [A](f: =>A): Unit = { //Definition
def loop(current: Int): Unit =
if(current > 0){
f
loop(current - 1)
}
loop(x)
}
}
}
object Demo {
def main(args: Array[String]) {
4 times println("hello") //Call
}
}
如果我们看一下“times”方法定义,它接受一个函数参数 -> 不接受任何输入并返回 A 作为输出。但是在“times”的调用中,函数 println 被传递,它接受一个字符串(“hello”)作为 i/p 并且什么都不返回(Unit)。
这与定义正好相反。但这按预期工作。这是如何工作的?
【问题讨论】:
-
println("hello")不是函数。是一个符合=> Unit类型的表达式,因此它是times方法 的有效值。另外,=> A并不意味着它需要一个函数,它需要一个by name parameter。 -
感谢您的回复。实际上,从一本 Scala 书籍中,我得到了理解。我在下面的评论中提供了更多详细信息。
-
抱歉回复晚了,here你可以检查它是否按照我的解释工作。