【发布时间】:2018-08-11 10:09:42
【问题描述】:
我可以写这个没问题:
mod sufficiently_long_namespace {
pub enum Foo {
Bar,
Buzz,
Quux,
}
}
use std::fmt::{Display, Error, Formatter};
impl Display for sufficiently_long_namespace::Foo {
fn fmt(&self, f: &mut Formatter) -> Result<(), Error> {
match self {
//-- NOTE: this works
sufficiently_long_namespace::Foo::Bar => write!(f, "it's Foo stuff"),
sufficiently_long_namespace::Foo::Buzz => write!(f, "it's Buzz stuff"),
sufficiently_long_namespace::Foo::Quux => write!(f, "it's Quux stuff"),
//-- but this doesn't:
// Self::Bar => write!(f, "it's Foo stuff"),
// Self::Buzz => write!(f, "it's Buzz stuff"),
// Self::Quux => write!(f, "it's Quux stuff"),
}
}
}
fn main() {
let test1 = sufficiently_long_namespace::Foo::Bar;
println!("{}", test1);
}
它编译得很好。令人惊讶的是,使用Self 注释掉的版本没有:
错误[E0599]:在当前范围内找不到类型
sufficiently_long_namespace::Foo的名为Bar的变体
这是rustc 1.30.0-nightly (73c78734b 2018-08-05)。
是我搞砸了我的命名空间,还是确实是一个错误?
最后,我确实想要明确的名称
impl Display for sufficiently_long_namespace::Foo,但必须在 match arm 中重复此操作似乎很笨拙。
【问题讨论】:
标签: namespaces rust