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

Scala编译中如何禁用尾递归?配置-g:notc参数编译报错求助

解决Scala编译禁用尾递归优化的报错问题

首先,你遇到的报错是因为-g:notc这个参数已经被当前Scala版本废弃了——这个参数只存在于非常旧的Scala版本(2.10及更早)中,现在的Scala已经把控制尾递归优化的选项和调试信息的选项分离开了。

正确的禁用尾递归优化的方式

现在要禁用Scala的尾递归优化,你需要使用-Xno-tailcalls这个编译参数,而不是旧文档里的-g:notc。

更新后的scala-maven-plugin配置

把你的插件配置里的无效参数替换成-Xno-tailcalls即可,示例配置如下:

<plugin>
  <groupId>net.alchim31.maven</groupId>
  <artifactId>scala-maven-plugin</artifactId>
  <version>你的插件版本</version>
  <executions>
    <execution>
      <goals>
        <goal>compile</goal>
        <goal>testCompile</goal>
      </goals>
    </execution>
  </executions>
  <configuration>
    <args>
      <arg>-target:jvm-${java.version}</arg>
      <arg>-unchecked</arg>
      <arg>-deprecation</arg>
      <arg>-feature</arg>
      <arg>-g:vars</arg>
      <arg>-Xno-tailcalls</arg> <!-- 用这个参数禁用尾递归优化 -->
    </args>
  </configuration>
</plugin>

补充说明

  • 原来的-g参数是用来控制编译时生成的调试信息类型(比如-g:vars会保留变量的调试信息),和尾递归优化没有关系,旧版本里把尾递归控制放在-g下的设计已经被废弃了。
  • Xno-tailcalls参数会让编译器不对尾递归函数进行优化,保留原本的函数调用栈结构,这正是你想要的效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:29:52