Этот вопрос сейчас устарел, потому что эта функция была реализована. Связанный ответ.
Следующий код Rust не компилируется:
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
*? Можно ли использовать что-либо еще, чтобы избежать повторения имени типа в теле метода?
* I'm ignoring usage in traits, where [TG49] refers to whatever type implements the trait.