2012-09-28 16 views
6

क्या पैटर्न पैटर्न में मैक्रो के लिए तर्क का उपयोग करने का कोई तरीका है? मैं यह करना चाहता हूं:मैक्रोज़, स्प्लिस, और पैटर्न मिलान

def extr(X:AnyRef) = macro extrImpl 

def extrImpl(c:Context)(X:c.Expr[AnyRef]):c.Expr[AnyRef] = { 
    import c.universe._ 

    val tree = reify { 
    new { 
     def unapply(x:String):Option[String] = x match { 
     case X.splice => Some(x) //error 
     case _ => None 
     } 
    } 
    }.tree 
    c.Expr(c.typeCheck(tree)) 
} 

लेकिन दुर्भाग्यवश संकलक कहते हैं "स्थिर पहचानकर्ता आवश्यक है, लेकिन X.splice मिला"।

val XX = X.splice 

लेकिन निश्चित है कि जोड़ के साथ या तो काम नहीं करता है की: आम तौर पर, एक तरह के रूप में पहली बार एक वैल को बताए, द्वारा इस का समाधान होगा।

उत्तर

2

दुर्भाग्य से यह अभी संभव नहीं है (और 2.10.0 फाइनल में संभव नहीं होगा), लेकिन हम काम में कुछ है कि बाद के बिंदु विज्ञप्ति :)

+0

लेकिन अगर मैं निर्माण किया कि यह काम करेगा में मदद कर सकता है है पेड़ मैन्युअल रूप से (यानी बिना सुधार के)? –

+0

बीटीडब्ल्यू, क्या यह एक बग है जिसे मुझे फिर से c.typecheck-workaround का उपयोग करना है? –

+1

हाँ यह मैनुअल पेड़ निर्माण के साथ काम करेगा। टाइपशेक की बात करते हुए, वर्तमान में यह एक ज्ञात समस्या है। मुझे नहीं पता कि हमारे पास इसके लिए एक बग है, लेकिन यह निश्चित रूप से कुछ है जिसे मैं ठीक करना चाहता हूं। –

संबंधित मुद्दे