2015-06-04 29 views
6

Rust'ta başka bir tiftik yazmak için, bir Expr türünün aslında bir Option<_> (veya herhangi bir işaretçiye) olduğundan emin olmalıyım.Bir rustc :: middle :: ty :: Ty ne türünü nasıl buluruz?

Ancak
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 
} 

, şimdi biraz kayboldum: I (elle daha iyi okunabilmesi için biçimlendirilmiş) zaten onların sonuca herhangi ptr s ve rptr s yürüdü ve benim test case için debugs bir rustc::middle::ty sol am - TyS'nin aslında bir Option < _> tipi olup olmadığını nasıl anlarım?

cevap

2

DefId'de with_path kullanmanız gerekir. Tüketmeniz gereken PathElem s üzerindeki bir yineleyici sağlanacaktır.

Aşağıdakiler kaba bir taslaktır, ancak biraz çimdik ederseniz size bir dizi Name s vermelidir.

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

Cool. Hatta bir '' str's dilimi ile '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' 'ı' 've' Vec önce bir Vec inşa etmeden onları karşılaştırmak mümkün oldu. – llogiq