rust练习笔记1
去掉未使用变量的warning
fn main() {
let _x = 1;
}
#[allow(unused_variables)]
fn main() {
let x = 1;
}
打印变量类型
// 解决代码中的错误和 `panic`
fn main() {
let v1 = 251_u16 + 8;
let v2 = 0.1+0.2;
println!("{}",type_of(&v1)); //u16
println!("{}",type_of(&v2)); //f64
let v2 = u16::checked_add(251, 8).unwrap();
// unwrap表示给我计算结果,如果有问题,panic
println!("{},{}",v1,v2);
}
fn type_of<T>(_: &T) -> String {
format!("{}",std::any::type_name::<T>())
}
浮点数判断相等
fn main() {
//assert!(0.1+0.2==0.3);
assert!((0.1_f32+0.2-0.3).abs()<0.01);
// abs()不能是不明确的float
}
类型转换
fn main() {
let mut sum = 0;
for i in -3..2 {
sum += i
}
assert!(sum == -5);
for c in 'a'..='z' {
println!("{}",c as u8); // 97 98...
}
}
空()
// 让代码工作:修改 `assert!` 中的 `4`
use std::mem::size_of_val;
fn main() {
let unit: () = ();
assert!(size_of_val(&unit) == 0);
// unit type doesn't occupy any memory space
println!("Success!")
}
发散函数
待续。
second borrow
// 注释掉一行代码让它工作
fn main() {
let mut s = String::from("hello, ");
let r1 = &mut s;
r1.push_str("world");
let r2 = &mut s;
r2.push_str("!");
//println!("{}",r1); // error
// 因为此时r1还被使用就有了二次引用
println!("{}",r2);
}
from into
demo:
use std::convert::From;
#[derive(Debug)]
struct Number {
value: i32,
}
impl From<i32> for Number {
fn from(item: i32) -> Self {
Number { value: item }
}
}
fn main() {
let int = 5;
// 试试删除类型说明
let num: Number = int.into();
println!("My number is {:?}", num);
}
String依次打印
fn main() {
// 填空,打印出 "你好,世界" 中的每一个字符
for c in "你好,世界".chars() {
println!("{}", c)
}
}
String无法通过索引访问某个字符
无法通过索引的方式去访问字符串中的某个字符,但是可以使用切片的方式 &s1[start..end]
,但是start 和 end 必须准确落在字符的边界处.