为了方便起见,我的代码中有很多重新导出,但有时我想明确排除一些东西,以避免可能的命名混乱或冲突的实现.
来自Scala,我预计下面的代码不会编译(我不希望它编译),因为Bar as _
语法将从导入中删除Bar.然而,这仍然会被编译.有没有什么Rust语法可以做我想要的?
pub mod stuff{
pub struct Foo{}
pub struct Bar{}
}
pub mod other_stuff{
use super::stuff::{*, Bar as _};
pub struct Baz{
foo : Foo,
bar : Bar
}
}
需要说明的是,除了Bar
之外,我想要从stuff
到use
.(obv在本例中,我只能导入Foo
个,但我的实际用例有很多导入,我不想逐一列出它们.)
编辑:我仍然想知道如何做到这一点,但我意识到我在激励别人的例子中犯了一个奇怪的错误.在这里发帖是为了了解背景,以防其他人被同样的事情绊倒.基本上,我的实际情况是这样的:
pub mod stuff{
pub struct Foo;
pub struct Bar;
}
pub mod yet_more_stuff{
use super::stuff::*;
pub struct Bar{}
pub struct Baz{
pub foo : Foo,
pub bar : Bar
}
impl Baz{
pub fn new() -> Self{
Self{
foo : Foo,
bar : Bar
}
}
}
}
上面的代码块没有编译;因为我在一个地方将Bar
定义为struct Bar;
,在另一个地方将其定义为struct Bar{}
,因此Baz
中的类型是yet_more_stuff:Bar
,而Baz::new()
中构造的值是stuff::Bar
.这看起来是相互冲突的,而不是像下面的答案所描述的那样优先.