RUST 筆記(二)
所有權
- Rust 中的每一個值都有一個被稱為其 所有者(owner)的變數。
- 值有且只有一個所有者。
- 當所有者(變數)離開作用域,這個值將被丟棄。
注意: - 將值傳遞給函式在語義上與給變數賦值相似
- 返回值也可以轉移所有權
變數的所有權總是遵循相同的模式:將值賦給另一個變數時移動它。當持有堆中資料值的變數離開作用域時,其值將通過 drop 被清理掉,除非資料被移動為另一個變數所有
在每一個函式中都獲取所有權並接著返回所有權有些囉嗦。如果我們想要函式使用一個值但不獲取所有權該怎麼辦呢?–>slice
借用
& 符號就是 引用,它們允許你使用值但不獲取其所有權
我們將獲取引用作為函式引數稱為 借用(borrowing)
如果我們嘗試修改借用的變數呢?全部加上mut
引用的規則
- 在任意給定時間,要麼 只能有一個可變引用,要麼 只能有多個不可變引用。
- 引用必須總是有效。
slice
一個沒有所有權的資料型別是 slice。slice 允許你引用集合中一段連續的元素序列,而不用引用整個集合。
- 字串字面值就是 slice,
let s = "hello world";
s 的型別就是$str
fn main() {
for item in (1..4).rev() {
println!("{}!", item);
}
println!("LIFTOFF!!");
let s1 = String::from("hello");
let s2 =s1; // 指標移動, s1被失效
// println!("{}", s1);
let x = 5;
let y = x; // 已知大小,是棧不是堆,所以不是移動,是複製
println!("x = {}, y = {}", x, y);
let mut s3 = String::from("hello");
changes(&mut s3);
println!("{}", s3);
// slice
let mut s = String::from("hello,world!");
let world = first_world(&s);
s.clear();
}
fn changes(s: &mut String){
s.push_str(", world!");
}
fn first_world(s: &String) -> &str{
let bytes = s.as_bytes();
for(i, &item) in bytes.iter().enumerate(){
if item==b' ' {
return &s[..i];
}
}
&s[..]
}
相關文章
- RUST 筆記(四)Rust筆記
- RUST 筆記(三)Rust筆記
- RUST 筆記(一)Rust筆記
- Rust 學習筆記Rust筆記
- 筆記二(JavaWeb)筆記JavaWeb
- Spring筆記二Spring筆記
- 【工具】git筆記(二)Git筆記
- 英國史筆記(二)筆記
- 軟考筆記二筆記
- Java學習筆記記錄(二)Java筆記
- ANFIS學習筆記(二)筆記
- activiti學習筆記二筆記
- Java筆記-Java反射(二)Java筆記反射
- Flutter 高效自學筆記(二)Flutter筆記
- Typescript學習筆記(二)TypeScript筆記
- JavaScript學習筆記(二)JavaScript筆記
- 『筆記』二分圖筆記
- React 學習筆記【二】React筆記
- goLang學習筆記(二)Golang筆記
- vue學習筆記二Vue筆記
- Kotlin Coroutines 筆記 (二)Kotlin筆記
- Linux筆記 篇(二)Linux筆記
- Docker筆記二之容器Docker筆記
- vue學習筆記(二)Vue筆記
- 科二學習筆記筆記
- koa原始碼筆記(二)原始碼筆記
- jQuery 學習筆記(二)jQuery筆記
- ChartDirector應用筆記(二)筆記
- git學習筆記(二)Git筆記
- Java學習筆記二Java筆記
- EJB基礎筆記(二)筆記
- 基督教筆記(二)筆記
- springside筆記二SpringIDE筆記
- TS學習筆記(二)筆記
- 007 Rust死靈書筆記之引用與別名Rust筆記
- python學習筆記(二)Python筆記
- vue + typescript 踩坑筆記(二)VueTypeScript筆記
- TensorFlow學習筆記(二)筆記