以下锈病代码无法编译:为什么`Self`不能用于引用方法体中的枚举变体?
enum Foo {
Bar,
}
impl Foo {
fn f() -> Self {
Self::Bar
}
}
错误信息混淆了我:
error[E0599]: no associated item named `Bar` found for type `Foo` in the current scope
--> src/main.rs:7:9
|
7 | Self::Bar
| ^^^^^^^^^
这个问题可以通过使用Foo
代替Self
是固定的,但给我的印象,因为Self
奇怪应该指的是正在实施的类型(忽略特征),在这种情况下是Foo
。
enum Foo {
Bar,
}
impl Foo {
fn f() -> Self {
Foo::Bar
}
}
为什么在这种情况下不能使用Self
? Self
哪里可以使用*?还有什么我可以用来避免在方法体中重复类型名称?
*我忽略了性状的使用,其中Self
指任何类型实现的特质。
枚举有点奇怪,因为它们作用于类型和名称空间之间。在这种情况下,Foo更像是一个名称空间。这就是说,这只是好奇心,还是这阻止你做你想做的事情? –
@PaoloFalabella这里'Self'的常用用法是减少类型名称的重复。我只是希望我能在方法体中做同样的事情。 – Challenger5
我遇到了一些很好的文章,https://users.rust-lang.org/t/confused-by-use-of-self-in-example-in-chapter-17-of-rust-book-2nd-编辑/ 11394。希望它对你有所帮助。 – shri