为什么带有映射的隐式会产生 Range 语句错误?

互联网 行业动态 更新时间:2024-06-13 00:19:06

Mat*_*zok 8

有根据的猜测(有 99% 的确定性):任何集合都可以扩展 ( Partial) Function,因此通过使集合成为隐式,您将提供隐式转换(因为任何一元implicit defOR 隐式函数都是隐式转换):

// this
implicit val thing = List[String]().map(_.to(List))
// implies this
implicit def intToCharList(idx: Int): List[Char]] =  thing(idx)

那么这里:

 1 to 1

你有歧义:它可能是:

扩展.to(Int)方法Int 隐式转换后的.to(CollectionType)普通方法List(自 Scala 2.13 起)Int

如果编译器选择后者,那么你有类似的东西

thing(1).to(1) // .to expects collection factory and got 1 instead 

这会触发您看到的错误。它可能会选择后者,因为您在同一范围内声明了richInt隐式转换LowPriorityImplicit,并且在in 中声明了隐式转换scala.Predef,因此 Scala 会更喜欢您的。

在 Scala 3 中,隐式转换是的子类型Function所以这个问题不会发生。在 Scala 2 中,我只能强烈建议不要将任何集合设为隐式。

更多推荐

语句,错误,隐式,Range

本文发布于:2023-04-20 20:27:48,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/hyzx/351ae95e491b7c51715342349ee1e6d1.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:语句   错误   隐式   Range

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!