Есть ли в Scala шаблон, который добавляет метод к объекту Array? - PullRequest
4 голосов
/ 06 мая 2010

Есть ли в Scala шаблон, который может добавить метод к объекту Array?

Я имею в виду неявное преобразование Int в RichInt. Но этого нельзя сделать, так как Array - последний класс.

Ответы [ 2 ]

11 голосов
/ 06 мая 2010

Пока вы избегаете коллизий имен с любыми другими неявными на Array (например, ArrayOps в 2.8, который добавляет методы коллекций), вы можете расширять, используя обычный неявный шаблон pimp-my-library:

class FooArray[T](at: Array[T]) {
  def foo() = at.length*at.length
}
implicit def array2foo[T](at: Array[T]) = new FooArray(at)
scala> Array(1,2,3).foo
res2: Int = 9
6 голосов
/ 06 мая 2010

Неявные преобразования не предотвращаются final -ности входного класса. Например, String имеет неявное преобразование в RichString (Scala 2.7) или StringOps (Scala 2.8).

Таким образом, вы можете определять неявные преобразования для Array с одним ключевым предостережением : вы должны отказаться от встроенного неявного преобразования Scala из Array в ArrayOps (только в Scala 2.8) .

...