Ответ 1
Нет, нет. Я думаю, это связано с тем, что перечисления в Rust намного мощнее, чем на Java - они на самом деле являются полноценными алгебраическими типами данных. Например, как бы вы ожидали итерации над значениями этого перечисления:
enum Option<T> {
None,
Some(T)
}
?
Его второй член Some
не является статической константой - вы используете его для создания значений Option<T>
:
let x = Some(1);
let y = Some("abc");
Таким образом, нет здравого смысла, вы можете перебирать значения любого перечисления.
Конечно, я думаю, можно было бы добавить специальную поддержку для статических перечислений (то есть перечисления с только статическими элементами) в компилятор, поэтому он будет генерировать некоторую функцию, возвращающую значения перечислимого или статического вектора с ними, но я считаю, что дополнительная сложность в компиляторе просто не стоит того.
Если вы действительно хотите эту функциональность, вы можете написать собственное расширение синтаксиса (см. этот выпуск). Это расширение должно получать список идентификаторов и выводить перечисление и статический вектор констант с этими идентификаторами в качестве содержимого. Регулярный макрос также будет работать в некоторой степени, но, насколько я помню, вы не можете дважды транскрибировать макросы с множественностью, поэтому вам придется вручную писать элементы перечисления вручную, что не удобно.
Также этот вопрос может представлять определенный интерес: # 5417
И, конечно, вы всегда можете написать код, который вручную возвращает список элементов перечисления.