2015-06-04 3 views
6

जंग में अभी तक एक फाहा लिखने के लिए, मुझे यकीन है कि एक Expr के प्रकार के वास्तव में एक Option<_> (या एक के लिए किसी भी सूचक) है बनाने की जरूरत है। मैं पहले से ही अपने निष्कर्ष पर किसी भी ptr और rptr रों चला गया है और एक rustc::middle::ty कि अपने परीक्षण में मामले को डिबग करता है के साथ छोड़ दिया हूँ (मैन्युअल रूप से बेहतर पठनीयता के लिए स्वरूपित):कैसे पता लगाने के लिए क्या एक rustc :: मध्य :: Ty :: Ty का प्रतिनिधित्व करता टाइप?

TyS { 
    sty: ty_enum(
    DefId { 
     krate: 2, 
     node: 117199 
    }, 
    Substs { 
     types: VecPerParamSpace { 
     TypeSpace: [ 
      TyS { 
      sty: ty_int(i32), 
      flags: 0, 
      region_depth: 0 
      } 
     ], 
     SelfSpace: [], 
     FnSpace: [], 
     }, 
     regions: NonerasedRegions(
     VecPerParamSpace { 
      TypeSpace: [], 
      SelfSpace: [], 
      FnSpace: [], 
     } 
    ) 
    } 
), 
    flags: 0, 
    region_depth: 0 
} 

हालांकि, अब मैं थोड़ा खो रहा हूँ - मैं कैसे लगाऊं कि TYS वास्तव में एक विकल्प < _> प्रकार है?

उत्तर

2

आप DefId पर with_path का उपयोग की जरूरत है। आप PathElem रों जो आप का उपभोग करना चाहिए पर एक इटरेटर उपलब्ध कराया जाएगा।

निम्नलिखित एक मोटा स्केच है, लेकिन यदि आप इसे थोड़ा सा ट्विक करते हैं तो आपको Name एस की सरणी देनी चाहिए।

if let ty_enum(did, ..) = ty.sty { 
    tcx.with_path(did, |iter| iter.map(|elem| elem.name())).collect::<Vec<Name>>; 
} 
+0

कूल। मैं भी कर रहा था करने के लिए '' .zip' की 'और str's एक टुकड़ा के साथ' नाम के के iter' और पहली बार एक वीइसी निर्माण के बिना उनकी तुलना। – llogiq

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