为什么我需要使用self :: core :: ops?

时间:2015-06-15 11:21:50

标签: rust

我正在尝试使用Mul中的core

这是由编译器建议的并且有效:

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`?

2 个答案:

答案 0 :(得分:14)

extern crate x;x加载到当前命名空间中。 use语句是绝对路径,除非它们以self::开头,因此如果您将extern crate core;放在除了crate root之外的任何位置,则需要指定绝对路径或使用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中找到,它会自动包含在内。

答案 1 :(得分:0)

事实证明我应该使用use std::ops::Mul;