В Scala 2.9 добавить пользовательские методы в класс библиотеки (обогатить или "сутенер" ). Мне пришлось написать что-то вроде этого:
object StringPimper {
implicit def pimpString(s: String) = new {
def greet: String = "Hello " + s
}
}
Как было выпущено Scala 2.10, я прочитал, что он вводит неявное определение класса, которое теоретически предназначалось для упрощения вышеупомянутой задачи, устраняя необходимость в неявном методе, возвращающем объект анонимного класса. Я думал, что это позволит мне написать просто
implicit class PimpedString(s: String) {
def greet: String = "Hello " + s
}
который выглядит намного красивее для меня. Но такое определение вызывает ошибку компиляции:
`implicit' modifier cannot be used for top-level objects
который решается путем повторного обнуления кода в объекте:
object StringPimper {
implicit class PimpedString(s: String) {
def greet: String = "Hello " + s
}
}
Нет необходимости говорить, что это почти нейтрализует смысл улучшения.
Итак, есть ли способ написать его короче? Чтобы избавиться от объекта-обертки?
На самом деле у меня есть пакет MyApp.pimps
, где все сутенеры идут (у меня их слишком много, я бы использовал некоторые отдельные пакеты, если бы у меня был), и мне больно импортировать MyApp.pimps.StringPimper._
вместо MyApp.pimps.PimpedString
или MyApp.pimps._
. Конечно, я мог бы поместить все неявные классы в один объект-оболочку, но это означало бы разместить их в одном файле, что было бы довольно длинным - довольно уродливым решением.