hiro99ma blog

Something technical

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!() を使う。


 < Top page


コメント(Google Formへ飛びます)

GitHub

X/Twitter

Homepage