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在输出变量时,需要进行一样很重要的操作,所以不在这里说明。