Scala 3中LocalDate作为main参数的隐式实例匹配错误问题
问题原因解析
这是Scala 3中给定实例(given)的文本可见性规则导致的问题,核心在于同一作用域内的给定实例必须在使用点之前定义,编译器才会将其纳入隐式查找范围:
泛型实例能被识别的原因
你的代码里,泛型的FromString[A]实例应该是定义在@main方法之前的。当@main方法参数为泛型A时,编译器解析隐式依赖时能看到前面已定义的泛型给定实例,因此可以正常匹配。LocalDate特定实例找不到的原因
而FromString[LocalDate]的给定实例应该是定义在@main方法之后的。Scala 3编译器处理对象内成员时严格遵循文本顺序:编译到@main方法(参数为LocalDate)时,后面的FromString[LocalDate]实例还未被加载,自然无法在隐式查找中被找到。移到对象外部正常的原因
当把FromString[LocalDate]移到对象外部(比如包级作用域),只要这个实例定义在Ex13对象之前,编译器处理Ex13内的@main方法时,就能全局查找到这个包级给定实例,不受对象内部文本顺序的限制。
你可以做个验证:把FromString[LocalDate]的给定实例移到@main方法之前,即使放在Ex13对象内部,编译器也能正常识别这个隐式实例,不会再报错。
内容的提问来源于stack exchange,提问作者flafora
相关产品推荐
相关产品推荐

