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