[解決済み] Rust では、enum の値を繰り返し処理する方法はありますか?
質問
私はJavaのバックグラウンドを持っており、以下のようなものがあります。
enum Direction { NORTH, SOUTH, EAST, WEST}
のようなものがあり、強化されたforループで順番にそれぞれの値で何かをすることができます。
for(Direction dir : Direction.values()) {
//do something with dir
}
Rustのenumで同じようなことをやってみたいです。
どのように解決するのですか?
いいえ、ありません。Rust の enum は Java よりもずっと強力で、実際には本格的なものだからだと思います。 代数的データ型 . 例えば、このenumの値に対してどのように反復処理を行うと思いますか?
enum Option<T> {
None,
Some(T)
}
?
その2番目のメンバーである
Some
は静的な定数ではありません。
Option<T>
:
let x = Some(1);
let y = Some("abc");
の値に対して反復処理を行うことはできません。 の値を反復処理することはできません。 の列挙は正気ではありません。
もちろん、私が思うに、それは特別なサポートを追加することが可能でしょう。 静的 enum (すなわち、静的な項目のみを持つ enum) の特別なサポートをコンパイラに追加することは可能で、enum の値またはそれらを含む静的ベクトルを返す関数を生成するでしょう。
もし本当にこの機能が欲しいのであれば、カスタム構文拡張を書くことができます ( これ の問題を参照)。この拡張は識別子のリストを受け取り、これらの識別子をコンテンツとして enum と静的定数ベクトルを出力する必要があります。通常のマクロでもある程度は動作しますが、私の記憶ではマクロの引数に多重度を2回転写することはできないので、enum要素を2回手書きすることになり、不便です。
また、この問題も多少は参考になるかと思います。 #5417
もちろん、enum要素のリストを返すコードをいつでも手で書くことができます。
関連
-
[解決済み] 式は、算術式またはスコープされていない enum 型でなければなりません。
-
[解決済み] Godotで文字列をenumに変換するには?
-
[解決済み] C#の[Flags]Enum属性の意味とは?
-
[解決済み] Javaでenumを繰り返し処理するためのforループ
-
[解決済み] Javaでリストを反復処理する方法
-
[解決済み] Goでenumを表現する慣用的な方法は何ですか?
-
[解決済み] enumの項目名を取得する方法は?
-
[解決済み] TypeScriptでenumのような型を作成する方法は?
-
[解決済み] Enumに関数を追加する
-
[解決済み] Dartは列挙をサポートしていますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 式は、算術式またはスコープされていない enum 型でなければなりません。
-
[解決済み] Godotで文字列をenumに変換するには?
-
[解決済み] Typescript の enum スイッチが機能しない
-
[解決済み] Goでenumを表現する慣用的な方法は何ですか?
-
[解決済み] Iterator(またはその他の trait)を返す正しい方法は何ですか?
-
[解決済み] Dart enumの "値 "を取得する方法
-
[解決済み] TypeScriptでenumのような型を作成する方法は?
-
[解決済み] 逆引きでKotlinのEnumを効率的に使う?
-
[解決済み] TypeScriptでenumのバリアントはどのように動作するのですか?
-
[解決済み] Enumに関数を追加する