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

Scala 2.13带负字面量的命名参数无空格赋值编译失败咨询

Scala 2.13中具名参数写法编译错误的原因分析

问题复现

以下代码在Scala 2.13中无法编译:

case class Foo(bar: String, baz: Int = -1)
val foo = Foo("foo", baz=-2)

编译器报错:Not found value baz

错误原因

这是Scala词法解析的歧义问题:当你写baz=-2时,编译器会将其解析为标识符baz减去字面量2(即表达式baz - 2),而非预期的具名参数赋值语法。因为Scala的词法分析规则中,紧跟在标识符后的-会被优先识别为减法运算符,而非负数字面量的符号,无空格分隔时这种歧义无法被消解。

修复方式

以下几种写法都能让代码正常编译:

  • 在=前后添加空格:Foo("foo", baz = -2)
  • 仅在=后添加空格:Foo("foo", baz= -2)
  • 将参数值替换为非负字面量:Foo("foo", baz=2)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 02:54:51