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

使用Scala Quicklens替换Enumeration字段触发scalac发射错误如何解决?

问题原因

该报错是Quicklens的宏展开逻辑处理scala.Enumeration类型成员引用的已知缺陷导致的:当modify路径的eachWhere谓词中直接引用枚举单例对象的成员时,宏生成的字节码会错误处理枚举对象的懒加载初始化路径,最终触发scalac的代码发射阶段异常,该问题在Scala 2.12/2.13版本搭配1.8.0版本以前的Quicklens时极易复现。

解决方案
  • 优先升级Quicklens到1.8.0及以上版本,该版本官方已经修复了枚举值在谓词中的引用解析bug,无需修改业务代码即可解决问题。
  • 若暂时无法升级依赖,可将谓词中引用的枚举值提前绑定到局部变量,修改后代码示例如下:
// 提前绑定枚举值到局部变量,避开宏的错误捕获
val target = value1
val replaceVal = value2
val b: Bar = bar.modify(_.address.name.eachWhere(_ == target)).setTo(replaceVal)
  • 也可以直接用原生Scala的嵌套copy语法实现相同逻辑,完全避开Quicklens宏处理:
val b: Bar = bar.copy(
  address = bar.address.copy(
    name = bar.address.name.map(v => if (v == value1) value2 else v)
  )
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 19:09:00