2015-06-15 3 views
7

Я пытаюсь использовать Mul от core.Зачем мне нужно использовать 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, потому что компилятор сказал 'core', и это супер неочевидная часть Rust :-( – Shepmaster

ответ

11

extern crate x; загружает x в текущее пространство имен. use утверждения являются абсолютными путями, если они не начинаются с 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', это то, что покажет устойчивый канал Rust. – bluss

Смежные вопросы