memory - 为什么“按引用捕获”等同于 Rust 中的“按值捕获引用”?
问题描述
摘自 Huon Wilson在 Rust 中发现的闭包:
完全按值捕获也比按引用捕获更严格:引用类型在 Rust 中是一等的,因此“按引用捕获”与“按值捕获引用”相同。因此,与 C++ 不同,按引用捕获和按值捕获之间几乎没有根本区别,而且 Rust 所做的分析实际上并不是必需的:它只是让程序员的生活更轻松。
我很难解决这个问题。如果您“按值”捕获引用,您不会捕获存储在堆上的数据吗?或者它是否引用了在堆栈上找到的引用的指针值?
解决方案
我认为文章的意思是说效果几乎相同。不可变引用实现了 Copy 特征,因此当您按值捕获引用时,它会被复制。所以基本上你只是创建了一个对相同数据的共享引用。
fn as_ref(_x: &String) {}
fn as_mut(_x: &mut String) {}
fn main() {
let mut x = String::from("hello world");
let y = &x;
let _ = move || {
as_ref(y); // here you moved y but it
// basically created a copy
};
let z = y; // can be used later
// The same cannot be done by mutable
// refs because they don't
// implement Copy trait
let y = &mut x;
let _ = move || {
as_mut(y); // here you moved y and
// it cannot be used outside
};
// ERROR! Cannot be used again
//let z = y;
}
推荐阅读
- r - R获取最大日期字符串
- postgresql - 如何在 Spring Data R2DBC 中禁用 Postgres 自动提交
- php - 无法使用 php 和 Jquery 打开 PDF 文件
- html - 如何有一个可垂直滚动和水平固定的固定侧边栏
- node.js - Jest 不会处理 typescript 中的 import 语句
- gooddata - gooddata java SDK中缺少操作?
- c# - 如何在多个类中访问同一个变量?(C#)
- python - 如何使用正则表达式搜索 unicode 文本并查找包含重复字母的单词?
- python - 使用 Python 运行 sox 命令来转换 wav 文件
- python - 这段代码执行后堆栈会为空吗?