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

Scala中重载ff函数触发StackOverflowError问题排查求助

问题分析与修复方案

兄弟,你这栈溢出的问题根源太明显了——无限递归搞的鬼!

咱们直接看你写的第二个ff函数:

def ff(p: Char => Boolean): Boolean = { ff(p) }

你重载了ff方法,这个版本接受一个Char => Boolean类型的谓词参数,但函数体里直接写ff(p),这相当于它在不停地调用自己,完全没和第一个查找单个字符的ff函数产生关联。每次调用这个谓词版本的ff,都会触发新一轮的自我调用,栈帧一层叠一层,最终直接把栈撑爆,自然就出现栈溢出错误了。

结合你的设计意图(从cursor位置开始查找满足条件的字符),这个谓词版本的ff得重新实现遍历逻辑,而不是瞎递归。修正后的代码应该是这样的:

def ff(c: Char): Boolean = { 
  while (cursor <= end) { 
    if (buffer.charAt(cursor) == c) { 
      return true 
    } else { 
      cursor += 1 
    } 
  } 
  false 
} 

// 修正后的谓词版本ff
def ff(p: Char => Boolean): Boolean = { 
  while (cursor <= end) { 
    val currentChar = buffer.charAt(cursor)
    if (p(currentChar)) { 
      return true 
    } else { 
      cursor += 1 
    } 
  } 
  false 
}

这样两个ff函数各自实现对应的查找逻辑:第一个找指定字符,第二个找满足谓词条件的字符,不会再出现无限递归的问题,cursor也能按照你的预期正常移动啦。

内容的提问来源于stack exchange,提问作者Mike Noel Higgs

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:10:32