Marginalman 板


LINE

: https://space.bilibili.com/361469957/lists/3902595 : 从入门到入门 1. Copy接口 fn copy_vs_move() { let v: Vec<i32> = vec![0, 1, 2]; let n_ref: &i32 = &v[0]; let n: i32 = *n_ref; let v: Vec<String> = vec![String::from("012")]; let s_ref: &String = &v[0]; let s: String = *s_ref; } i32 是基础类型,有 copy 接口,而 String 则没有 因此在 i32 进行 let n = *n_ref 的时候发生的是复制非转移所有权 而 String 进行 let s = *s_ref 的时候因为没有实现复制的接口, 因此会尝试获得所有权(他是 String 而非 &String )造成错误 因为基础型态有实现 copy 接口,所以可以自动解引用 但 String 本身是 Stack 指标储存资料在 Heap 的关系, 所以这边要让 let s = &v[0].clone() 或各种非借用方式来解决 2. 成员变数的所有权 fn tuple_fields() { let mut name: (String, String) = ( String::from("Ferris"), String::from("Rustacean") ); let first: &String = &name.0; name.1.push_str(", Esq."); println!("{first} {}", name.1); } 当使用 let first = &name.0 借用的时候, name 本身与 name.0 成员失去可变性, 但 name.1 仍然可以借用也能可变借用 因为在 Rust 2018 版本以後,成员变数被当成独立个体, 而更之前的 Rust 版本这样则会编译错误,因为成员变数被当成整体 3. 承以上 code fn tuple_fields() { let mut name: (String, String) = ( String::from("Ferris"), String::from("Rustacean") ); let first: &String = get_first(&name); name.1.push_str(", Esq."); println!("{first} {}", name.1); } fn get_first(name: &(String, String)) -> &String { &name.0 } 如果是这样,在 let first: &String = get_first(&name); 这行会编译错误, 因为 Rust 不管 Function 内的所有权实作, 因此编译器会判断 get_first(&name); 把整个 name 借走, 此时 name.1 即使在 function 内没被使用也被视为不可变 不过这只是现在版本的判断,有机会跟 2. 提到的一样, 新版本 Rust 如果让编译器变得更聪明了, 就有机会让它判断 function 内部是否有借用来让这段 code 通过, 但至於何时会这样更新,恐怕只有当事人自己知道了…… --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 60.248.143.172 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Marginalman/M.1743047985.A.6AF.html ※ 编辑: yam276 (60.248.143.172 台湾), 03/27/2025 12:01:23
1F:推 oin1104: 大师 03/27 12:08







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Gossiping站内搜寻

TOP