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
相关产品推荐
相关产品推荐

