std::fmt
http://doc.rust-lang.org/std/fmt/index.html
code:rs
format!("Hello"); // => "Hello"
format!("Hello, {}!", "world"); // => "Hello, world!"
format!("The number is {}", 1); // => "The number is 1"
format!("{:?}", (3, 4)); // => "(3, 4)"
format!("{value}", value=4); // => "4"
code:rs
let people = "Rustaceans";
format!("Hello {people}!"); // => "Hello Rustaceans!"
これできるんだmrsekut.icon
code:rs
format!("{} {}", 1, 2); // => "1 2"
format!("{:04}", 42); // => "0042" with leading zeros
format!("{:#?}", (100, 200)); // => "(
// 100,
// 200,
// )"
GPT-4.icon
Rustのフォーマット構文の基本ルール
code:rust
"{引数番号 [: 埋め文字配置幅 .精度 フラグ]}"
: でフォーマット指定を開始
オプションを順番に記述
幅 (width):何文字分の幅を取るか
埋め文字 + 配置 (fill + alignment):左寄せ (<)、中央寄せ (^)、右寄せ (>)
精度 (precision):小数点以下の桁数を指定(浮動小数点の場合)
+(符号):符号を常に表示する
#(代替表記):進数表記(0x、0b など)を付ける
0(ゼロ埋め):数値をゼロ埋めする
$ を使うと引数の順番を指定できる
例
1. 幅指定 (width)
code:rust
println!("|{:5}|", "x"); // | x|
幅5(x の前にスペースが入る)
2. 埋め文字 (fill) & 配置 (alignment)
code:rust
println!("|{:->5}|", "x"); // |----x|
println!("|{:^5}|", "x"); // | x |
println!("|{:.^5}|", "x"); // |..x..|
> 右寄せ、^ 中央寄せ、< 左寄せ(デフォルト)
. や - などの埋め文字を指定可能
3. 符号 (+)
code:rust
println!("{:+}", 5); // +5
println!("{:+}", -5); // -5
+ を指定すると正の値も符号付きで表示される
4. 進数の代替表記 (#)
code:rust
println!("{:#x}", 27); // 0x1b(16進数)
println!("{:#b}", 10); // 0b1010(2進数)
# を付けると 0x や 0b がつく
5. ゼロ埋め (0)
code:rust
println!("{:05}", 5); // 00005
println!("{:05}", -5); // -0005
数値の埋め文字はデフォルトでスペースだが、0 を指定するとゼロ埋めされる
6. 小数点以下の桁数 (precision)
code:rust
println!("{:.2}", 3.14159); // 3.14
println!("{:8.2}", 3.14159); // 3.14
.2 を指定すると小数点以下2桁に切り捨て
7. $ を使って引数の順番を明示
code:rust
println!("{1} is {0}", "first", "second"); // second is first
println!("{1:0$}", 5, "x"); // " x"(5文字分)
$ を使うと 0$ の部分が最初の引数(5)を幅として使用する
code:rs
format!("prev: {page.prev:0pad_length$}");
↑こう書けない
↓こう書かないといけない
code:rs
let prev = page.prev;
format!("prev: {prev:0pad_length$}");
うーんmrsekut.icon
読みづらい
code:rs
let content = formatdoc! {"
{}
prev: {:0pad_length$}
next: {:0pad_length$}
{}
{}"
title,
page.prev,
page.next,
url,
ocr_text
.lines()
.map(|line| format!("> {}", line))
.collect::<Vec<_>>()
.join("\n")
);
絶対こうのほうがマシ
code:rs
let content = formatdoc! {"
{title}
prev: {prev:0pad_length$}
next: {next:0pad_length$}
{url}
{ocr_lines}"
};