gpt4 book ai didi

namespaces - 为什么我不能在 trait impl block 中的 match arms 中使用 Self?

转载 作者:行者123 更新时间:2023-11-29 08:07:26 26 4
gpt4 key购买 nike

<分区>

我可以写这个没问题:

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 的注释掉的版本没有:

error[E0599]: no variant named Bar found for type sufficiently_long_namespace::Foo in the current scope

这是在 rustc 1.30.0-nightly (73c78734b 2018-08-05) 上进行的。

我是否搞砸了我的命名空间,或者这确实是一个错误?

最后,我确实想要明确的名字impl Display for enoughful_long_namespace::Foo,但必须在 match arms 中重复此操作似乎很笨拙。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com