S-JIS[2024-10-09] 変更履歴

Rust print!系マクロ

Rustマクロのprint!系マクロのメモ。


概要

print!系マクロは、コンソールに文字列を出力するマクロ

マクロ名 説明 Java類似
print! 標準出力に出力する。 System.out.print()
println! 標準出力に改行付きで出力する。→ System.out.println()
eprint! 標準エラーに出力する。 System.err.print()
eprintln! 標準エラーに改行付きで出力する。 System.err.println()
dbg! 式と演算結果の値を標準エラーに出力し、その値を返す。→
(dbg!マクロはRust標準のマクロであり、logクレートのdebug!マクロとは別物)
 

print!系マクロでの出力は、cargo testによってテストとして実行したときには、コンソールには出力されない。
(dbg!マクロも内部ではeprintln!()を呼んでいるので、同じ)

cargo testに「-- --nocapture」を付けるとコンソールに出力されるようになる。

cargo test
cargo test -- --nocapture

println!マクロの例

print!系マクロは、format!マクロの書式を使用できる。

fn main() {
    println!();	// 改行のみ

    println!("message");	// 固定文字列

    let n = 123;
    println!("n={}", n);	// Displayトレイトが実装されている型は、{}でその値を出力できる
    println!("n={n}");  	// {}内に変数名を書くと、その変数の値が出力される

    let v = vec![1, 2, 3];
    println!("v={:?}", v);	// Debugトレイトが実装されている型は、{:?}でその値を出力できる
    println!("v={v:?}");
}

dbg!マクロの例

dbg!(式)」を実行すると、標準エラーに「[ソースファイル名:行番号:列番号] 式 = 値」が出力される。

fn main() {
    let n = 123;
    dbg!(n);

    let n = dbg!(1 + 2);
    assert_eq!(3, n);
}

↓実行例

[src/main.rs:3:5] n = 123
[src/main.rs:5:13] 1 + 2 = 3

マクロへ戻る / Rustへ戻る / 技術メモへ戻る
メールの送信先:ひしだま