Пример из статьи Pimp my library можно получить следующим образом:
class RichArray[T: Manifest](value: Array[T]) {
def append(other: Array[T]): Array[T] = {
val result = new Array[T](value.length + other.length)
Array.copy(value, 0, result, 0, value.length)
Array.copy(other, 0, result, value.length, other.length)
result
}
}
implicit def enrichArray[T: Manifest](xs: Array[T]) = new RichArray[T](xs)
Вам нужен контекстный предел для T: [T: Manifest]
- это сокращение от [T](implicit m: Manifest[T])
. Манифест - это способ передачи значения T методу во время выполнения, когда T известен. Обычно параметризованная информация о типе используется компилятором для обеспечения безопасности типов во время компиляции, но не включается в байт-код, потому что JVM не может ее обработать (стирание типа). Коллекции Scala изменились в версии 2.8, так что по соображениям производительности массивы теперь не переносятся автоматически с помощью магии компилятора, поэтому стало необходимым предоставление манифеста для универсальных операций.
Другое изменение - аргумент (xs)
для new RichArray[T]
. Я думаю, что это опечатка.