谁能解释一下,为什么我从for_each中go 掉了"move",程序就挂起了?

use std::sync::mpsc::channel;
fn main() {
    let v = vec![0,1,2,3,4,5,6,7,8,9];
    let (tx, rx) = channel();
    v.iter().for_each(move |&elem| {
        tx.send(elem).unwrap();
    });
    println!("Tx'ed");

    let rx_vec: Vec<_> = rx.iter().collect();

    println!("Collected into vec");
}

推荐答案

如果没有move,代码就会挂起,因为在这个变体中,tx永远不会被丢弃,所以通道不会关闭,所以rx会无限期地等待额外的数据,您可以在rx.iter()之前只有drop(tx)来关闭通道.

Rust相关问答推荐

关联类型(类型参数)命名约定

我如何在Rust中使用传递依赖中的特征?

Rust类似功能是C++命名空间吗?

为什么`str`类型可以是任意大小(未知大小),而`string`类型的大小应该是已知的?

Rust ndarray:如何从索引中 Select 数组的行

如何设置activx websocket actorless的消息大小限制?

确保参数是编译时定义的字符串文字

为什么切片时需要参考?

unwrap 选项类型出现错误:无法移出共享引用后面的*foo

如何为整数切片定义一个带有额外函数的特性别名?

如何使用 Rust Governor 为每 10 秒 10 个请求创建一个 RateLimiter?

为什么这段 Rust 代码会在没有递归或循环的情况下导致堆栈溢出?

为什么不可变特征的实现可以是可变的?

返回引用字符串的future

使用部分键从 Hashmap 中检索值

你能告诉我如何在 Rust 中使用定时器吗?

如何异步记忆选项中的 struct 字段

用逗号分隔字符串,但在标记中使用逗号

Abortable:悬而未决的期货?

在同一向量 Rust 中用另一个字符串扩展一个字符串