我想要一个 scala 宏来执行以下操作:
当我写的时候:
myCreateCityMacro("paris")
myCreateCityMacro("vallorbe")
我想得到:
val paris = new City("paris")
val vallorbe = new City("vallorbe")
这可以使用 scala Dynamic 功能来解决:
import scala.language.dynamics
object Cities extends App {
var c = new DynamicMap[String, City]()
createCity("Paris")
createCity("Vallorbe")
println(c.Paris, c.Vallorbe)
def createCity(name: String) {
c.self.update(name, new City(name))
}
}
class City(name: String) {
override def toString = s"-[$name]-"
}
class DynamicMap[K, V] extends Dynamic {
val self = scala.collection.mutable.Map[K, V]()
def selectDynamic(key: K) = self(key)
}
执行时:
(-[Paris]-,-[Vallorbe]-)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)