3
我想有一個階宏,執行以下操作: 當我寫:簡單的斯卡拉宏觀
myCreateCityMacro("paris")
myCreateCityMacro("vallorbe")
我想獲得:
val paris = new City("paris")
val vallorbe = new City("vallorbe")
我想有一個階宏,執行以下操作: 當我寫:簡單的斯卡拉宏觀
myCreateCityMacro("paris")
myCreateCityMacro("vallorbe")
我想獲得:
val paris = new City("paris")
val vallorbe = new City("vallorbe")
這可以使用Scala的得到解決動態特性:
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]-)
'val x = new X(「x」)'在Scala中不是一個簡單的表達式,因此,如果您想知道,不能由宏返回。我認爲你的情況最好的辦法是'val x = city',它是一個通過檢查上下文調用的前綴來推斷城市名稱的宏。 – jeslg 2013-02-15 13:46:27
Ops,我錯了,'context.prefix'不能訪問val的名字。 – jeslg 2013-02-15 15:05:31