2015-06-15 6 views
7

मैं core से Mul का उपयोग करने का प्रयास कर रहा हूं।मुझे self :: core :: ops का उपयोग करने की आवश्यकता क्यों है?

इस संकलक ने सुझाव दिया और काम करता है:

extern crate core; 

use self::core::ops::Mul; 

लेकिन क्यों

extern crate core; 

use core::ops::Mul; 

काम नहीं करता है?

मैं त्रुटि error: unresolved import `core::ops::Mul`. Did you mean `self::core::ops`?

+4

क्यों नहीं 'std :: ops :: Mul' का उपयोग करें? – mdup

+2

@mdup क्योंकि कंपाइलर ने 'कोर' कहा और यह जंग का एक सुपर गैर-स्पष्ट हिस्सा है :-( – Shepmaster

उत्तर

11
वर्तमान नेम स्पेस में

एक extern crate x; भार xuse बयान निरपेक्ष पथ जब तक कि वे self:: के साथ शुरू कर रहे हैं, इसलिए यदि आप अपने extern crate core; कहीं भी रख लेकिन टोकरा जड़ तो आप एक पूर्ण पथ निर्दिष्ट या self:: उपयोग करने के लिए की जरूरत है।

mod foo { 
    mod bar { 
     extern crate core; 
     use foo::bar::core::ops::Mul; 
     // or `use self::core::ops::Mul;` 
     // or even `use super::bar::core::ops::Mul;` if you’re mad 
     // but not `use core::ops::Mul;`. 
    } 
} 

... लेकिन एक सामान्य नियम के रूप में आपको सीधे core का उपयोग नहीं करना चाहिए। इससे सभी स्थिर सामान std में उपलब्ध है जो स्वचालित रूप से शामिल है।

0

ऐसा लगता है कि मैं use std::ops::Mul; का उपयोग करना चाहिए मिलता है।

+0

'libcore' का उपयोग करना संभव है, और स्थिति के लिए जब आप 'libstd' के बिना बना रहे हैं। पसंदीदा 'libstd', इस समय जंग का स्थिर चैनल खुलासा करता है। – bluss

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