変数がどうなっているのかを確認する方法
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: "山田太郎" }