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

