文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
1.2 Hello, World!
从零开始,main 是用户代码入口函数,无参数和返回值。
// main.rs fn main() { println!("hello, world!"); }
获取命令行参数,返回退出码。
use std::env::args; use std::process::exit; fn main() { println!("{:?}", args()); exit(2); }
提示: 鉴于编译速度较慢,优先使用 cargo c
进行语法检查,需要动态调试时再编译。
技巧
对接下来学习有帮助的一些小知识。
输出
向终端输出字符串。
以
!
结尾表示该表达式是一个宏调用。
print!
:io::stdout
println!
:eprint!
:io:stderr
eprintln!
:
格式:
{}
: 自动顺序。{0}
: 指定序号。{name}
: 命名参数,或作用域内同名变量。{:?}
,{:#?}
: 调试格式。{:p}
: 指针。
fn main() { println!("{}, {}", 1, 2); // 1, 2 println!("{1}, {0}", 1, 2); // 2, 1 println!("{x}, {y}", y = 1, x = 2); // 2, 1 }
调试格式有助于观察,比如按代码样式输出结构体。
#[derive(Debug)] struct Person<'a> { name: &'a str, age : u8 } fn main() { let name = "Peter"; let age = 27; let peter = Person { name, age }; println!("{:?}", peter); } // Person { name: "Peter", age: 27 }
断言
相比输出,使用断言更易阅读。
fn main() { let x = 1; let y = 1; assert!(x == y); assert_eq!(x, y); assert_ne!(x, y); }
还有专门用于调试的断言。
fn main() { debug_assert_eq!(1, 2); // --release 不生成相关代码。 }
输出表达式
输出表达式用于调试查看,并返回结果。
fn main() { let a = 1; let b = dbg!(a + 1); // output: [src/main.rs:3] a + 1 = 2 assert_eq!(b, 2); }
类型信息
获取目标类型和尺寸信息。
fn type_of<T>(_: &T) -> &'static str { std::any::type_name::<T>() } fn size_of<T>(_: &T) -> usize { std::mem::size_of::<T>() }
fn main() { let d = [1, 2, 3, 4, 5]; assert_eq!(type_of(&d), "[i32; 5]"); assert_eq!(size_of(&d), 20); }
获取对象实例长度。
use std::mem::size_of_val; fn main() { let d = [1i64, 2, 3]; assert_eq!(size_of_val(&d), 24); assert_eq!(size_of_val(&d), size_of_val(&d[0]) * d.len()); }
执行时间
自定义宏,获取表达式执行时间。
#[macro_export] macro_rules! elapsed { ($e: expr) => ( use std::time::Instant; let now = Instant::now(); { $e; } println!("elapsed: {:?}", now.elapsed()); ); } fn main() { elapsed!({ println!("hello"); }); } // hello // elapsed: 16.6µs
编译控制
添加注解(attribute),抑制无害警告信息。避免编译器输出过多提示,影响查看。
#![allow(dead_code)] #![allow(unused_variables)] #![allow(unused_assignments)] #![allow(unused_imports)]
尚未完成
标记尚未完成的代码,可用于测试结果提示。
todo!
: 未完成。unimplemented!
: 未实现。
fn test() { todo!(); }
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论