🚙

【Rust】フォーマット文字列に変数を設定したい

2022/06/05に公開

概要

RustではRust の文字列フォーマット回り(改訂版)の記事にある通り、設定したフォーマット文字列に対して、変数を埋め込んで出力ができます。ただ、元のフォーマット文字列を変数で以下のように設定しようとすると、コンパイルエラーとなります。

let base_url = "http://sample.com/search?key={key}&page={page}";
let url = format!(base_url, key = "sample_key", page = 1);

今回はフォーマット文字列に変数を設定したい場合、どうすれば良いかメモ書きします。

対応

println! error: expected a literal / format argument must be a string literalのstackoverflowの記事にある通り、フォーマット文字列に対してマクロを設定すれば大丈夫そうです。

実装サンプル

macro_rules! base_url {() => ("http://sample.com/search?key={key}&page={page}")}
let url = format!(base_url!(), key = "sample_key", page = 1);

Discussion