Scala 3中上下文函数扩展方法调用报错,是否为预期行为?
问题解答
这是Scala 3的预期行为,原因在于扩展方法调用的解析逻辑与上下文函数的特性交互导致:
- 当使用
.调用扩展方法(i.extFoo)时,编译器会尝试将调用转换为extFoo(i),但此时它会把i当作需要上下文依赖的值处理——也就是试图先解析i类型(List[String] ?=> Int)所需的List[String]given实例,但main函数作用域中并没有提供该实例,因此触发报错。 - 当使用
extFoo(i)直接调用时,编译器明确识别到你是将i这个上下文函数值本身作为参数传递,而非要先求值i得到Int。此时i作为上下文函数类型参数传入extFoo,而extFoo内部的foo函数已经提供了List[E]的given实例,因此可以正常执行。
内容的提问来源于stack exchange,提问作者riccardo.cardin
相关产品推荐
相关产品推荐

