在`use`声明中使用本地名称

时间:2017-03-20 13:32:42

标签: rust

有没有办法在use声明中引用本地名称?

pub mod a {
    pub mod b {
        pub mod c {

        }
    }
}

fn main() {
    use a::b;

    use a::b::c; //< This compiles, but is kind of roundabout,
        // considering that I have already imported `b` into scope.

    use b::c; //< This fails to compile!

    use self::b::c; //< This also fails to compile
}

我目前正在开发一个生成代码的过程宏,并且为了保持卫生,我想为本地导入的包添加use声明(在这种情况下为extern crate blah)。但是,我似乎无法在use声明中引用该名称。

有可能吗?详细说明use名称解析的规则在哪里?

我放了一个more elaborate/motivating example,其中我使用use将特征带到操场上。

1 个答案:

答案 0 :(得分:0)

如果您已导入a::b并想要从c访问特征,则可以按以下方式执行此操作:

pub mod a {
    pub mod b {
        pub mod c {
            pub trait Foo {}
        }
    }
}

fn main() {
    use a::b;

    struct Derp;

    impl b::c::Foo for Derp {}
}