変数がどうなっているのかを確認する方法
println
println!で変数の内容を出力する場合、"{:?}" を使います。
println!("{:?}", [変数])
例
fn main() {
let s = "ABC";
println!("{:?}", s); // "ABC"
println!("{:?}", s.chars()); // Chars(['A', 'B', 'C'])
println!("{:?}", s.chars().nth(1)); // Some('B')
println!("{:#?}", s.chars().nth(1).unwrap()); // 'B'
let i = 123;
println!("{:?}", i); // 123
}
実行結果は以下のようになります。
"ABC"
Chars(['A', 'B', 'C'])
Some('B')
'B'
123
改行して出力
見やすいように改行ありで出力する場合は、"{:#?}" を指定します。
例
fn main() {
let s = "ABC";
println!("{:#?}", s.chars()); // 改行される
println!("{:#?}", s.chars().nth(1)); // 改行される
println!("{:#?}", s.chars().nth(1).unwrap());
let i = 123;
println!("{:#?}", i);
}
出力は以下になります。
"ABC"
Chars([
'A',
'B',
'C',
])
Some(
'B',
)
'B'
123
構造体(struct)
構造体の変数を表示したい場合、型定義に std::fmt::Debug のトレイトを実装する必要があります。 実装せずに表示したい場合は、定義行の上に以下を付けます。
#[derive(Debug)]
例
#[derive(Debug)]
struct User {
id: u32,
name: String,
}
fn main() {
let user = User {
id: 12345,
name: String::from("山田太郎"),
};
println!("{:?}", user);
}
実行結果は以下になります。
User { id: 12345, name: "山田太郎" }
std::fmt::Debugの実装
std::fmt::Debug のトレイトの実装では、"use std::fmt" が必要になります。
例
use std::fmt;
struct User {
id: u32,
name: String,
}
impl fmt::Debug for User {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.debug_struct("User")
.field("id", &self.id)
.field("name", &self.name)
.finish()
}
}
fn main() {
let user = User {
id: 12345,
name: String::from("山田太郎"),
};
println!("{:?}", user);
}
実行結果は以下になります。
User { id: 12345, name: "山田太郎" }