3个版本
使用旧的Rust 2015
0.1.2 | 2017年7月17日 |
---|---|
0.1.1 | 2017年7月16日 |
0.1.0 | 2017年7月16日 |
#2146 在 数据结构
14KB
277 行
闭包
此crate提供了一种分离代码和状态的抽象。其中之一是允许使用递归闭包以及像 PartialEq
和 Clone
这样的trait实现。
请参阅示例目录以获取一些使用示例。
需要Rust的nightly版本,因为此crate依赖于unboxed closures。
文档
lib.rs
:
extern crate closures;
use std::thread;
use std::sync::mpsc;
use closures::Closure;
struct State {
id: i32,
messages: Vec<&'static str>,
tx: mpsc::Sender<(i32, &'static str)>,
}
fn main() {
let (tx, rx) = mpsc::channel();
let state = State {
id: 0,
messages: vec!["hello", "rusty", "world"],
tx: tx.clone(),
};
thread::spawn(Closure::new(state, thread));
let state = State {
id: 1,
messages: vec!["veni", "vidi", "vici"],
tx: tx,
};
thread::spawn(Closure::new(state, thread));
for (id, msg) in rx {
println!("Thread {} sent: {}", id, msg);
}
}
fn thread(this: &State) {
for msg in &this.messages {
this.tx.send((this.id, msg)).unwrap();
}
}