Re: [閒聊] 每日leetcode 75 - Day3 - 2

作者: yam276 ('_')   2025-05-29 18:59:40
※ 引述《yam276 (史萊哲林的優等生)》之銘言:
: 因為 Rust 是 Lazy Iterator 求值
: 只有在 .collect() .for_each() .next()
: 這種終結操作函數的時候才一次執行所有 closure (閉包) 的東西
: 而我在 closure 裡面進行外部變數的借用與變動 .pop() 方法
: 導致編譯器無法確認 borrow check
: 導致行為不穩定 (根據編譯器而有不同結果)
這似乎是個更複雜的問題
let x = vec![1, 2, 3]; // x 是原始資料
let mut iter = x.into_iter(); // iter 是封閉的、消耗 x 的結構
具體是第一條是原始資料
在 closure 使用的時候如果被 mutation
會被認為是無法被 borrow checker 追蹤的東西出錯
(因為 closure 是 lazy iterator 在最後才執行)
所以如果是第二條的寫法
就等於不是原始資料 而是你自己創一個可掌握的東西
像是圖書館的書 你卻偷撕書頁下來用
這樣這些書頁是只有你擁有的
就能確定不會有其他人跟你搶這個東西的所有權

Links booklink

Contact Us: admin [ a t ] ucptt.com