You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scala隐式类中内部递归方法的执行逻辑疑问

Scala隐式类代码疑问解答

先看完整代码:

object ImplicitDemo {

  def calculate(f: => Int) = f * 37

  implicit class IntWithTimes(x: Int) {
        def times[A](f: => A) : Unit = {
          def loop(current: Int): Unit =
            if(current > 0) {
              f
              loop(current - 1)
            }
          f
          loop(x)
        }
  }
  def main (args: Array[String]): Unit ={

    (-5).times(println("abc"))

  }
}

疑问解答

  • 疑问1:loop函数的初始current值为何等于x?
    loop是times方法内部定义的函数,当times里调用loop(x)时,是把IntWithTimes类构造时传入的x(也就是调用.times的那个Int值,这里是-5)作为实参,传递给loop的形参current,所以current的初始值自然就是x。

  • 疑问2:传入loop(x)时x为-5,为何不会死循环?
    loop函数的逻辑是只有当current > 0时,才会执行传入的f并递归调用loop(current-1)。当x=-5时,loop的初始current是-5,-5 > 0不成立,所以if代码块完全不会执行,直接退出loop函数,根本不会触发递归,自然不会死循环。

补充:这段代码里(-5).times(println("abc"))只会打印一次"abc",因为times方法在调用loop之前先执行了一次f,而loop内部的f根本没机会执行。

内容的提问来源于stack exchange,提问作者Carol

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 00:31:38