rust: 途中で改行したい
2025/03/05
BDK のサンプルコードを見ていた。
25行目から結果の出力をしているのだが、format 部分の文字列が長い。
println!(
"---------------- Descriptors ------------------------------\nPrivate Key, External:\n{:?}\nPrivate Key, Internal:\n{:?}\nPublic Key, External:\n{:?}\nPublic Key, Internal:\n{:?}\n",
descriptor.to_string_with_secret(&key_map), // privkey
change_descriptor.to_string_with_secret(&change_key_map),
descriptor.to_string(), // pubkey
change_descriptor.to_string()
);
途中で改行したい。
C言語風の、改行前にバックスラッシュを置くと次の行とつながる、というのはできた。
できたのだけど、次の行から先頭に入っているスペースは反映されないのが不思議だ。
println!(
"---------------- Descriptors ------------------------------\n\
Private Key, External:\n\
{:?}\n\
Private Key, Internal:\n\
{:?}\n\
Public Key, External:\n\
{:?}\n\
Public Key, Internal:\n\
{:?}\n",
descriptor.to_string_with_secret(&key_map), // privkey
change_descriptor.to_string_with_secret(&change_key_map),
descriptor.to_string(), // pubkey
change_descriptor.to_string()
);
もう1つの C言語風、ダブルクォートで囲んだ文字列同士はつながる、というのはダメだった。
println!(
"---------------- Descriptors ------------------------------\n"
"Private Key, External:\n"
"{:?}\n"
"Private Key, Internal:\n"
"{:?}\n"
"Public Key, External:\n"
"{:?}\n"
"Public Key, Internal:\n"
"{:?}\n",
descriptor.to_string_with_secret(&key_map), // privkey
change_descriptor.to_string_with_secret(&change_key_map),
descriptor.to_string(), // pubkey
change_descriptor.to_string()
);
そういう書き方をしたいなら concat!()
を使うそうだ。
println!(concat!(
"---------------- Descriptors ------------------------------\n",
"Private Key, External:\n",
"{:?}\n",
"Private Key, Internal:\n",
"{:?}\n",
"Public Key, External:\n",
"{:?}\n",
"Public Key, Internal:\n",
"{:?}\n"),
descriptor.to_string_with_secret(&key_map), // privkey
change_descriptor.to_string_with_secret(&change_key_map),
descriptor.to_string(), // pubkey
change_descriptor.to_string()
);
これだと次行の前にスペースを入れられるし、コンパイル時に結合されるので精神的にもよろしい。
固定文字列じゃなかったら format!()
を使う。