2013-02-14 3 views
3

매크로 : 나는 쓸 때 을 : 내가 좋아하는 것 간단한 스칼라 나는 다음을 수행 스칼라 매크로하고 싶은

myCreateCityMacro("paris") 
myCreateCityMacro("vallorbe") 

는 얻을 :

val paris = new City("paris") 
val vallorbe = new City("vallorbe") 
+0

'val x = new X ("x")'는 Scala에서 간단한 표현식이 아니므로 매크로에 의해 반환 될 수 없습니다. 저는 여러분의 경우에 대한 최선의 접근법이'val x = city'라고 생각합니다. _city_ 문맥 호출의 접두어를 검사하여 도시의 이름을 유추하는 매크로입니다. – jeslg

+0

Ops, 나는 틀렸다.'context.prefix'는 val의 이름에 접근 할 수 없다. – jeslg

답변

0

이는 스칼라를 사용하여 해결 될 수있다 동적 기능 :

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]-)