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);
}
这里的最后一个语句是一个表达式, 而不是完整的代码语句, 并且不能携带
;
, 不然会被赋值为()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!