私はRustのパーサを実装しています。空白は、match
パターンで再利用したい一般的なパターンです。Rustの変数にパターンを保存するにはどうしたらいいですか?
このコードは動作します:
let ch = ' ';
match ch {
' ' | '\n' | '\t' | '\r' => println!("whitespace"),
_ => println!("token"),
}
私は空白のパターンを毎回指定するに保つために必要がある場合は、これは本当に繰り返しになるだろう。私はそれを一度定義して再利用したいと思います。私は次のようなことをしたい:
let whitespace = ' ' | '\n' | '\t' | '\r';
let ch = ' ';
match ch {
whitespace => println!("whitespace"),
_ => println!("token"),
}
コンパイラはws
割り当てが気に入らない。これは、代替の代わりに|
をバイナリ操作として解釈します。
パターンは何らかの形で変数に格納できますか?これを行うにはより良い方法や慣用的な方法がありますか?
これはマクロのための良い候補のように見えますが、マクロがRustに行く方法であるのかどうか疑問です... – turbulencetoo
@ turbulencetoo興味深い考えです。 Cでは、マクロは低レベルのテキスト操作であり、結果としてソースコードが無効になる可能性があります。 Rustでは、マクロを呼び出すことができる場所の数は限られており、拡張は構文的に有効でなければなりません。私はパターンが有効な場所のセットにあるとは思わない。しかし、あなたはいつでも有効な錆のコードになるようなテキストファイルを生成するためのビルドスクリプトを作成することができます。 – Shepmaster