【发布时间】:2013-02-10 20:58:42
【问题描述】:
在 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或MyApp.pimps._。当然,我可以将所有隐式类放在一个包装器对象中,但这意味着将它们全部放在一个文件中,这会很长 - 非常丑陋的解决方案。
【问题讨论】: