不仅仅是HelloWorld

Winstone 发布于 2026-07-24 13:19 阅读 18

Hello world

Rust 原生支持 UTF-8 编码的字符串,这意味着你可以很容易的使用世界各国文字作为字符串内容。

关注下 println 后面的 !,是  操作符,你目前可以认为宏是一种特殊类型函数

println!("{}", &region);

对于 println 来说,我们没有使用其它语言惯用的 %s%d 来做输出占位符,而是使用 {},因为 Rust 在底层帮我们做了大量工作,会自动识别输出数据的类型,例如当前例子,会识别为 &str 类型。

Rust 的集合类型不能直接进行循环,需要变成迭代器(这里是通过 .iter() 方法),才能用于迭代循环

下马威

相关文章

1 条评论

fn main() { let penguin_data = "
common name,length (cm) Little penguin,33 Yellow-eyed penguin,65 Fiordland penguin,60 Invalid,data ";

let records = penguin_data.lines();

for (i, record) in records.enumerate() { if i == 0 || record.trim().len() == 0 { continue; }

 // 声明一个 fields 变量,类型是 Vec
 // Vec 是 vector 的缩写,是一个可伸缩的集合类型,可以认为是一个动态数组
 // <_>表示 Vec 中的元素类型由编译器自行推断,在很多场景下,都会帮我们省却不少功夫
 let fields: Vec<_> = record
   .split(',')
   .map(|field| field.trim())
   .collect();
 if cfg!(debug_assertions) {
     // 输出到标准错误输出
   eprintln!("debug: {:?} -> {:?}",
          record, fields);
 }

 let name = fields[0];
 // 1. 尝试把 fields[1] 的值转换为 f32 类型的浮点数,如果成功,则把 f32 值赋给 length 变量
 //
 // 2. if let 是一个匹配表达式,用来从=右边的结果中,匹配出 length 的值:
 //   1)当=右边的表达式执行成功,则会返回一个 Ok(f32) 的类型,若失败,则会返回一个 Err(e) 类型,if let 的作用就是仅匹配 Ok 也就是成功的情况,如果是错误,就直接忽略
 //   2)同时 if let 还会做一次解构匹配,通过 Ok(length) 去匹配右边的 Ok(f32),最终把相应的 f32 值赋给 length
 //
 // 3. 当然你也可以忽略成功的情况,用 if let Err(e) = fields[1].parse::<f32>() {...}匹配出错误,然后打印出来,但是没啥卵用
 if let Ok(length) = fields[1].parse::<f32>() {
     // 输出到标准输出
     println!("{}, {}cm", name, length);
 }

} }

7 小时前