備忘メモ。
忘れてまたググりそうなので。
Rustで、文字列*1中にダブルクォーテーション(")と中括弧*2({と})を含めたい場合、エスケープ処理が必要になる。
結論だけ先に書いとく。
- ダブルクォーテーションの場合、エスケープ文字(\)を使って「\"」のように書く
- 中括弧の場合、同じ文字列を繰り返し(「{」なら「{{」、「}」なら「}}」)と書く
参考情報:
Rustのエスケープ文字の一覧
Module std::fmtのEscaping
実行例:
なお、動作確認には、「Rustツアー」の「Rust Playground」を利用した。
まずは、「Hello world!」のコード。
fn main() { println!("Hello, World!"); }
これは、こうなる。
次に、この「Hello World!」のコードをprintlnするコードを書く。
そのまま、文字列の中に突っ込むと...
fn main() { println!(" fn main() { println!("Hello, World!"); } ") }
まぁ、怒られる。
文字列中に「"」が含まれているから怒られているのは想像できるので、エスケープする。
fn main() { println!(" fn main() { println!(\"Hello, World!\"); } ") }
これでOK...と思いきや、まだ怒られる。
無効な書式と言われてる。
「}」が来るべきところに、なんで「p」がきてるの?っって言われている。
中括弧が悪さをしてそう。
「{}」は書式文字列(format!)で定義されているマクロなので、これが動作しないようにする必要がありそう。
ということで、エスケープをするも...
fn main() { println!(" fn main() \{ println!(\"Hello, World!\"); \} ") }
「error: unknown character escape: `{`」と、また怒られる。
どうやら、中括弧はエスケープ文字ではエスケープできなさそう。
で、調べてみると、同じ文字を連続(「{」なら「{{」)でエスケープするっぽい。
ということで、修正してみる。
どうかな?
fn main() { println!(" fn main() {{ println!(\"Hello, World!\"); }} ") }
いけた!