2013-03-26 3 views
7

में प्रतीकों के आयात और वाइल्डकार्ड आयात मेरे पास संकुल, वस्तुओं और वर्गों का प्रतिनिधित्व करने वाले प्रतीकों की एक सूची है और उन्हें एक मैक्रो संदर्भ में आयात करना चाहते हैं।स्कैला

पैकेज और वस्तुओं के लिए, इसका मतलब वाइल्डकार्ड आयात होगा और कक्षाओं के लिए इसका मतलब "मानक" आयात होगा।

को देखते हुए एक List[Symbol]some.package, some.Class और some.Object से मिलकर, मैं कैसे ठीक से उन आयात होता है और मैं कैसे तय कर सकते हैं एक "मानक" या एक वाइल्डकार्ड आयात में इस्तेमाल किया जा करने की जरूरत है या नहीं?

मेरे वर्तमान दृष्टिकोण यह है:

def importPackageOrModuleOrClass(sym: Symbol): Import = 
    if (sym.isPackage || sym.isModule) // e. g. import scala._, scala.Predef 
    gen.mkWildcardImport(sym) 
    else        // e. g. import java.lang.String 
    gen.mkImport(sym.enclosingPackage, sym.name, sym.name) // <--- ????? 

पैकेज/मॉड्यूल आयात काम करता है, लेकिन कक्षा आयात हालांकि नहीं यह सही लगती है।

+1

पर आयात बारे में अधिक संकेत, को परिलक्षित करती है, sourcecode के माध्यम से आदि प्राप्त कर सकते हैं मैंने इसे 'ट्रीगेन' सामान के साथ किया गया, लेकिन यदि आप इसे नियमित पुराने मैक्रो में लिख रहे थे, तो आपको 'sym.name' (जो वर्तमान में 'TypeName') को' टर्मनाम 'में बदलना होगा। –

+0

कोई ऐसा कैसे करेगा? मुझे लगता है कि मैंने 'asTerm' की कोशिश की, लेकिन यह काम नहीं किया। – soc

+1

यहां [एक त्वरित उदाहरण] (https://gist.github.com/travisbrown/5948460) है जो आपके कोड को एक प्रयोग के साथ जोड़ता है जिसे मैं थोड़ी देर पहले काम कर रहा था। वही बात मुद्रित हो जाती है चाहे आप 'TypeName' को 'टर्मनाम' में परिवर्तित करें या नहीं, लेकिन केवल 'टर्मनाम' संस्करण काम करता है। –

उत्तर