Closed2

sprintfの引数を使いまわして文字列を生成する

白湯白湯

C# の string.Format() で {} を使ったときのように、引数を使い回せたらいいなぁって思ってた。

string.Format("{0} {1} {0}", "A", "B"); // A B A

ドキュメントを読んでいたらどうやら可能らしい。

format
// 省略
変換の仕様は、以下のプロトタイプに従います: %[argnum$][flags][width][.precision]specifier.

Argnum
何番目の引数を変換の対象にするかを指定するために、 数値の後にドル記号 $ を続けます。

sprintf('%1$s %2$s %1$s', 'A', 'B'); // A B A

完全に見落としてた。

普段使ってる関数だったとしても、ドキュメントに目を通すことは大事だな。

白湯白湯

ちなみにこれ、$format の文字列をダブルクォートで囲ってしまうと、$s が変数として展開されてしまう。
\$s とすれば動くが、可読性は下がる。

sprintf("%1\$s %2\$s %1\$s", 'A', 'B'); // A B A
このスクラップは2023/01/04にクローズされました