我希望能够将 pimp-my-library 模式应用于状态,而不是行为。具体来说,如果你在隐式 def 中定义了一个 var,设置它,然后尝试读取它,状态就会丢失。我整理了一个人为的例子:
class Planet(val name: String)
object SolarSystem {
val Mercury = new Planet("Mercury")
val Venus = new Planet("Venus")
val Earth = new Planet("Earth")
val Mars = new Planet("Mars")
val Jupiter = new Planet("Jupiter")
val Saturn = new Planet("Saturn")
val Uranus = new Planet("Uranus")
val Neptune = new Planet("Neptune")
val Pluto = new Planet("Pluto")
}
object Pimper {
implicit def pimpPlanet(planet: Planet) = {
new {
var distanceFromSun: Int = 0
}
}
import SolarSystem._
Jupiter.distanceFromSun = 5 // AU
}
object Main {
def main(args: Array[String]) {
import SolarSystem._
import Pimper._
println(Jupiter.distanceFromSun)
}
}
自然,这将打印 0,但我希望它打印 5。我考虑了一些解决方案,包括扩展 SolarSystem 和覆盖 Jupiter 是什么,或者在外部有一个由 getter & setter 填充/读取的地图。
我对 Scala 很陌生,我希望有一种更优雅的方式来做这样的事情。也是的,冥王星是一颗行星:)