rust学习笔记(3)
变量
- 变量默认是不可变的
- 不能使用没有初始化的变量
作用域
变量离开作用域之后会直接释放, 无法再次使用; 在内部代码块中定义的变量会导致外部的变量被遮蔽
类型转换
部分类型可以隐式转换, 部分类型需要使用 as 手动显式转换
let num_u32 = 100u32;
let num_i64 = num_u32 as i64;
From和Into
实现对应的接口可以方便进行类型转换.
From和Into的函数接口是自动推断和相互转换的, 所以, 只需要实现From接口的from函数即可
struct Number {
value: i32,
}
impl From<i32> for Number {
fn from(value: i32) -> Self {
Number { value }
}
}
fn main() {
let number: Number = 42.into();
println!("The number is {}", number.value);
}
TryFrom和TryInto
当进行类型转换的时候, 可能出现类型不能转换的情况, 这个时候会抛出异常, 异常需要被处理, 所以, 应该使用 Result 作为返回值被接受
impl TryFrom<i32> for EvenNumber {
type Error = ();
fn try_from(value: i32) -> Result<Self, Self::Error> {
if value % 2 == 0 {
Ok(EvenNumber(value))
} else {
Err(())
}
}
}
to_string和from_string
实现了 Display 的接口之后的默认也是实现了 to_string 的方法
变量传递
使用 & 传递变量的引用
类型推断
根据变量如何使用和变量初始化时候的赋值自动推断
表达式计算变量
可以在 {} 中编写表达式, 计算出来的结果会被赋值给变量
fn main() {
let x = 5u32;
let y = {
let x_squared = x * x;
let x_cube = x_squared * x;
// 将此表达式赋给 `y`
x_cube + x_squared + x
};
let z = {
// 分号结束了这个表达式,于是将 `()` 赋给 `z`
2 * x;
};
println!("x is {:?}", x);
println!("y is {:?}", y);
println!("z is {:?}", z);
}
这里的最后一个语句是一个表达式, 而不是完整的代码语句, 并且不能携带
;, 不然会被赋值为()

浙公网安备 33010602011771号