在 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
所有皮条客都去的包(我没有太多,如果有的话,我会使用一些单独的包)而且我厌倦了导入MyApp.pimps.StringPimper._
而不是MyApp.pimps.PimpedString
or MyApp.pimps._
。当然,我可以将所有隐式类放在一个包装器对象中,但这意味着将它们全部放在一个文件中,这会很长 - 非常丑陋的解决方案。