练习 day 1
本文最后更新于 117 天前,其中的信息可能已经有所发展或是发生改变。

斐波那契数列练习 Rust day 1

涉及知识

  • 变量绑定
  • 元组解构
  • 可变性

最终成果

fn sum_f(n: u32) -> u64 { 
    //创建元组
    let (mut a,mut b) =(0,1);
    if n == 0 {
        return 0;
    }
    for _ in 1..n {
        // 元组解构
        (a, b) = (b, a + b);
    }
    b
}

fn main() {
    let n: u32 = 10; 
    println!("n = {}, fib(n) = {}", n, sum_f(n)); 
}

练习总结

<font color=“409EFF”>切记分清楚哪些数据是直接通过栈复制而不进行所有权转移</font>


默认实现 Copy 的类型

类型 说明
i8, i16, i32, i64, i128, isize 有符号整数
u8, u16, u32, u64, u128, usize 无符号整数
f32, f64 浮点数
bool 布尔值
char Unicode 字符
()(单元类型) 空元组
不可变引用 &T 引用本身可 Copy,但指向的数据不一定
数组 [T; N](如果 TCopy 例如 [i32; 5]Copy
元组 (T1, T2, ...)(如果所有成员都是 Copy 例如 (i32, bool)Copy

默认不实现 Copy 的类型

类型 说明
String 堆分配的字符串
Vec<T> 动态数组
Box<T> 堆分配的指针
Rc<T>, Arc<T> 引用计数指针
Mutex<T>, RwLock<T> 线程同步类型
可变引用 &mut T 可变引用不可 Copy

关键区别

  • Copy 类型:可以通过一对一直接内存复制来创建副本的数据类型,赋值、传参、返回时自动复制(栈复制),原变量仍可用。
  • Copy 类型:需要通过特殊复制逻辑来创建(或无法创建)副本的数据类型,赋值、传参、返回时转移所有权(Move),原变量失效。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇