Например, если у меня есть код, как:Можно ли преобразовать строку в enum без макросов в Rust?
enum Foo {
Bar,
Baz,
Bat,
Quux
}
impl Foo {
from(input: &str) -> Foo {
Foo::input
}
}
Это, очевидно, не потому, что input
не метод Foo. Я могу вручную набрать:
from(input: &str) -> Foo {
match(input) {
"Bar" => Foo::Bar,
// and so on...
}
}
но я не получаю автоматическое удобство.
Похоже, что Java имеет string lookup function на перечислениях для этой конкретной цели.
Можно ли получить это без написания собственного макроса или импорта из ящика?
Что делать, если вместо '' Bar "' вам нужно '' Foo :: Bar "или' "my_module :: Foo :: Bar" или '" bar "'? Это помогает объяснить, почему нет готового способа сделать это. В стандартной библиотеке нет ничего, кроме того, что вы просто попросите рекомендации библиотеки/инструмента. – Shepmaster
Я не думаю, что ваше редактирование в моем ответе необходимо: вы попросили автоматическое удобство, которое вы получили с ящиками, о которых я упоминал, и вам не нужно писать собственный макрос, потому что ящики уже предоставляют макрос. – antoyo