Я столкнулся с проблемой, пытаясь создать неявный класс, применимый ко всем подклассам Traversable, включая Array. Я попробовал следующий простой пример как в Scala 2.11.1, так и в 2.10.4:
implicit class PrintMe[T](a: Traversable[T]) {
def printme = for (b <- a) print(b)
}
Насколько я понимаю, это должно допускать неявное преобразование в PrintMe, чтобы printme можно было вызывать на любом Traversable, включая List и Array. Например:
scala> List(1,2,3).printme
123
// Great, works as I expected!
scala> Array(1,2,3).printme
<console>:23: error: value printme is not a member of Array[Int]
Array(1,2,3).printme
// Seems like for an Array it doesn't!
scala> new PrintMe(Array(1,2,3)).printme
123
// Yet explicitly building a PrintMe from an Array works
Что тут происходит? Почему неявное преобразование работает для списка, а не для массива?
Я понимаю, что были некоторые хитрости с адаптацией java-массивов, но, глядя на рисунок ниже с http://docs.scala-lang.org/overviews/collections/overview.html определенно кажется, что Array должен вести себя как подкласс Traversable.