Scala 3中Int Refined Positive无法编译问题咨询
解决Scala 3.2.2 + Refined 0.10.2编译失败问题
你的代码编译失败是因为Scala 3的隐式解析机制和Scala 2存在差异,auto._提供的自动转换无法正常触发。可以通过以下两种方式解决:
方案一:使用显式编译时宏创建实例
改用refineMV宏生成Refined类型实例,这是Scala 3环境下更可靠的方式:
import eu.timepit.refined._ import eu.timepit.refined.api.Refined import eu.timepit.refined.numeric._ val i1: Int Refined Positive = refineMV(5)
refineMV会在编译阶段验证值是否符合约束,不符合时直接抛出编译错误,和自动转换效果一致,但在Scala 3中兼容性更好。
方案二:补充语法支持导入
添加完整的语法支持导入,确保隐式转换能被正确解析:
import eu.timepit.refined._ import eu.timepit.refined.api.Refined import eu.timepit.refined.auto._ import eu.timepit.refined.numeric._ import eu.timepit.refined.syntax.all._ val i1: Int Refined Positive = 5
额外说明
Refined 0.10.2对Scala 3的支持虽已完善,但官方文档示例更多基于Scala 2的隐式逻辑,在Scala 3中显式使用refineMV是更推荐的实践,可避免隐式解析的兼容性问题。
内容的提问来源于stack exchange,提问作者Bondarenko
相关产品推荐
相关产品推荐

