2015-06-15 9 views
7

Ich versuche Mul von core zu verwenden.Warum muss ich self :: core :: ops verwenden?

Dies wird durch den Compiler vorgeschlagen und arbeitet:

extern crate core; 

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

aber warum nicht

extern crate core; 

use core::ops::Mul; 

Arbeit?

Ich erhalte den Fehler error: unresolved import `core::ops::Mul`. Did you mean `self::core::ops`?

+4

Warum nicht 'std :: ops :: Mul' verwenden? – mdup

+2

@mdup, weil der Compiler 'core' sagte und das ist ein super nicht-offensichtlicher Teil von Rust :-( – Shepmaster

Antwort

11

Ein extern crate x; lädt x in den aktuellen Namespace. use Anweisungen sind absolute Pfade, es sei denn, sie beginnen mit self::. Wenn Sie also extern crate core; an einer anderen Stelle als der Kiste root angeben, müssen Sie einen absoluten Pfad angeben oder self:: verwenden.

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;`. 
    } 
} 

... aber als allgemeine Regel sollten Sie core sowieso nicht direkt verwenden. Alle stabilen Sachen von ihm sind in std verfügbar, die automatisch enthalten ist.

0

Es stellt sich heraus, dass soll ich use std::ops::Mul; verwenden.

+0

Die Verwendung von' libcore' ist möglich, und ist für die Situation, wenn Sie überhaupt ohne 'libstd' bauen 'libstd', ist es, was der stabile Kanal von Rust im Moment ausstellt. – bluss

Verwandte Themen