2、初识Rust – println

目录 编程

在第一篇里,博主第一次使用了Rust输出了Hello,World!,其中除了入口main之外,打印Hello,World!的函数名字叫println完整的代码为  println!("Hello,World!");。特别需要注意的是Rust的缩进是4空格而不是1tab。

其中println!调用了一个Rust宏,如果调用函数的话,就得去掉感叹号,也就是变成println(XXXX)。因为目前没有学习到宏这个概念所以先放一边,只需要知道!和没有!大致的差别即可。

当println打印变量时,需要变更一下输出方式。例如

println!("{}",变量);
println!("{},{}",变量1,变量2);
println!("{变量}")

当打印一些特殊的数据例如结构体时,就会产生错误

error[E0277]: `Rectangle` doesn’t implement `std::fmt::Display`

因为虽然pprintln!宏可以处理非常多的类型的格式,但是{}默认告诉println!,使用被称为Display的格式。这是为了提供给终端用户直接查看的输出。大部分类型都实现了Display输出。不过当遇到结构体时(有点像json)这样输出就是存在问题的了,Rust不会允许这样的问题出现,就会抛出错误,同时在错误的下方就有解决方法。

= help: the trait `std::fmt::Display` is not implemented for `Rectangle`
= note: in format strings you may be able to use `{:?}` (or {:#?} for pretty-print) instead

尝试修改后输出println!("{:?}",结构体); 。不过可惜的是,出现了一个新的错误。

error[E0277]: `Rectangle` doesn't implement `Debug`

继续往下看提示。

= help: the trait `Debug` is not implemented for `Rectangle`
= note: add `#[derive(Debug)]` to `Rectangle` or manually `impl Debug for Rectangle`

原来需要在结构体声明时,在上面加上属性#[derive(Debug)]来为结构体显式选择这个功能

#[derive(Debug)]
struct xxxxx {
    xxx: u32,
    xxx: u32,
}

接下去运行就能正常显示

xxxx is xxxx { xxx: 30, xxx: 50 }

不过还能继续改进,当结构体特别大时肯定想要整理结构后输出,那样可视性更加好。只需要更改下println!就能实现

println!("{:?}",结构体); ->变成-> println!("{:#?}",结构体);

xxxx is xxxx { 
   xxx: 30, 
   xxx: 50 
}

不过println!是属于标准输出,还有一种叫dbg方法输出的内容就是标准错误输出,在特殊情况下,就得使用dbg方法输出内容,来告诉用户,发生错误了。但是因为dbg在输出变量时,需要进行一样很重要的操作,所以不在这里说明。