ZhangHanDong / tao-of-rust-codes

《Rust编程之道》随书源码
https://ruststudy.github.io/tao_of_rust_docs/tao_of_rust/
MIT License
1.18k stars 170 forks source link

「第六章」FnOnce闭包具有改变环境的能力 #247

Open HunDunDM opened 4 years ago

HunDunDM commented 4 years ago

页码与行数


文本或排版错误

·Fn,表示闭包以不可变借用的方式来捕获环境中的自由变量,同时也表示该闭包没有改变环境的能力,并且可以多次调用。对应&self。 ·FnMut,表示闭包以可变借用的方式来捕获环境中的自由变量,同时意味着该闭包有改变环境的能力,也可以多次调用。对应&mut self。 ·FnOnce,表示闭包通过转移所有权来捕获环境中的自由变量,同时意味着该闭包没有改变环境的能力,只能调用一次,因为该闭包会消耗自身。对应self。

FnOnce具有改变环境的能力,同时个人觉得更合适的描述如下,供参考:

·Fn,表示闭包至多只存在以不可变借用的方式来捕获环境中的自由变量,同时也表示该闭包没有改变环境的能力,并且可以多次调用。对应&self。 ·FnMut,表示闭包存在以可变借用的方式来捕获环境中的自由变量,同时意味着该闭包有改变环境的能力,也可以多次调用。对应&mut self。 ·FnOnce,表示闭包存在通过转移所有权来捕获环境中的自由变量,同时意味着该闭包可能有改变环境的能力,取决于是否存在以可变借用的方式来捕获的环境中的自由变量,只能调用一次,因为该闭包会消耗自身。对应self。


相关代码

示例代码与其MIR

Rust版本

$ rustc -V
rustc 1.38.0-nightly (c43d03a19 2019-08-14)
ZhangHanDong commented 4 years ago

@HunDunDM 感谢详细的反馈。

ZhangHanDong commented 4 years ago

这个修改说明版面里放不下了,移动到第二版中修复。

feiyumm commented 3 years ago

应该是使用捕获变量的方式。 下面这个代码是以转移所有权的方式捕获变量,但是是以不可变借用的方式使用的 Code