Mat*_*zok 8
有根据的猜测(有 99% 的确定性):任何集合都可以扩展 ( Partial
) Function
,因此通过使集合成为隐式,您将提供隐式转换(因为任何一元implicit def
OR 隐式函数都是隐式转换):
// 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
发布评论