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")
이는 스칼라를 사용하여 해결 될 수있다 동적 기능 :
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'라고 생각합니다. _city_ 문맥 호출의 접두어를 검사하여 도시의 이름을 유추하는 매크로입니다. – jeslg
Ops, 나는 틀렸다.'context.prefix'는 val의 이름에 접근 할 수 없다. – jeslg