Rust 学习笔记 07:Slice 类型

Rust 学习笔记 07:Slice 类型 “Slice and dice your data safely.” 在 Go 语言中,Slice (切片) 是一个非常核心的概念,它底层是一个结构体 (ptr, len, cap)。 在 Rust 中,Slice 也是类似的,但它有一个本质的区别:Rust 的 Slice 是一种引用(Borrowed Type)。 它不拥有数据,它只是借用了数据的一部分。 1. 字符串切片 (String Slices) 假设我们有一个字符串 s: 1let s = String::from("hello world"); 我们可以创建一个切片,指向它的一部分: 1let hello = &s[0..5]; // 指向 0,1,2,3,4 2let world = &s[6..11]; 注意那个 & 符号,说明 hello 是一个引用。 它的类型是 &str(读作 “string slice”)。它内部包含两个字段: 指向数据的指针 (ptr) 切片的长度 (len) 这和 Go 的 Slice 结构几乎一样,只是少了容量 (cap),且必须依附于原字符串存在。 2. 切片与所有权 既然 Slice 是引用,它就受借用规则的约束。 ...

2024-09-08 · 2 min · 217 words · 老墨

Rust 学习笔记 06:引用与借用 (References & Borrowing) 下

Rust 学习笔记 06:引用与借用 (References & Borrowing) 下 “Borrow checkers are the strict librarians of the programming world.” 上一集我们讲了所有权 (Ownership):把东西给别人(Move),自己就没了。这虽然安全,但太麻烦了。 比如我想计算一个字符串长度,难道每次都要把所有权传进去,算完再传回来? 1// 痛苦的写法 2fn calculate_length(s: String) -> (String, usize) { 3 let length = s.len(); 4 (s, length) // 还要把 s 传回去,心累 5} Rust 说:别急,你可以 借 (Borrow) 啊。 1. 引用 (References) 引用允许你使用值但不获取其所有权。在 Rust 中,用 & 符号表示。 1fn main() { 2 let s1 = String::from("hello"); 3 4 // 传引用:&s1 5 let len = calculate_length(&s1); 6 7 // s1 依然有效!因为我们只是借出去了,没送出去。 8 println!("The length of '{}' is {}.", s1, len); 9} 10 11// 接收引用:&String 12fn calculate_length(s: &String) -> usize { 13 s.len() 14} 这叫 借用 (Borrowing)。就像你借了朋友的书,你看完了得还回去(离开作用域),但书还是朋友的。 ...

2024-08-25 · 2 min · 278 words · 老墨