Scala 2.9 では、カスタム メソッドをライブラリ クラスに追加する (エンリッチまたは "pimp") には、次のように記述する必要がありました。
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
にすべての売春斡旋業者が行くパッケージを持っており(あまり多くはありません。持っていれば別のパッケージを使用します)、orのMyApp.pimps.StringPimper._
代わりにインポートするのにうんざりしています。もちろん、すべての暗黙的なクラスを 1 つのラッパー オブジェクトに入れることもできますが、これはそれらすべてを 1 つのファイルに入れることを意味し、かなり長くなり、非常に醜い解決策になります。MyApp.pimps.PimpedString
MyApp.pimps._