Я широко использую шаблон Pimp my Library и как удалить шаблон. Например, скажем, у меня есть какая-то черта PrettyPrint:
trait PrettyPrint { def prettyPrint: String }
Если я хочу прокачать Int и Double, мне нужно написать такой код:
implicit def int2PrettyPrint(self: Int) =
new PrettyPrint { def prettyPrint = "Int: " + self }
implicit def double2PrettyPrint(self: Double) =
new PrettyPrint { def prettyPrint = "Double: " + self }
В приведенном выше я бы классифицировал как шаблон: 1) имя неявного преобразования, 2) ключевое слово «новое», 3) возможно, имя аргумента «я», 4) возможно, ключевое слово «неявное». Я бы лучше написал что-то вроде этого:
@pimp[Int, PrettyPrint] { def prettyPrint = "Int: " + self }
@pimp[Double, PrettyPrint] { def prettyPrint = "Double: " + self }
Предполагается, что в правой части приведенного выше кода имя «я» является аргументом преобразования.
Идеи, как это сделать?
Некоторые примечания:
1) Я могу использовать Scala 2.10, если это необходимо.
2) Насколько я могу судить, новых неявных классов в Scala 2.10 недостаточно. Это связано с тем, что для каждого неявного класса существует только одно неявное преобразование. Другими словами, следующий код не будет компилироваться, потому что PrettyPrint объявлен дважды:
implicit class PrettyPrint(self: Int) = ...
implicit class PrettyPrint(self: Double) = ...