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) "new" キーワード、3) おそらく引数名 "self"、4) おそらく "implicit" キーワード。私はむしろこのようなものを書きたい:
@pimp[Int, PrettyPrint] { def prettyPrint = "Int: " + self }
@pimp[Double, PrettyPrint] { def prettyPrint = "Double: " + self }
上記のコードの右側では、「self」という名前が変換引数であると想定されています。
これを行う方法についてのアイデアはありますか?
いくつかのメモ:
1) 必要に応じて Scala 2.10 を使用します。
2)私の知る限り、Scala 2.10 の新しい暗黙のクラスは十分ではありません。これは、暗黙的なクラスごとに暗黙的な変換が 1 つしかないためです。つまり、PrettyPrint が 2 回宣言されているため、次のようなコードはコンパイルされません。
implicit class PrettyPrint(self: Int) = ...
implicit class PrettyPrint(self: Double) = ...