#clone #traits #eq #unboxed

nightly no-std 闭包

闭包中分离代码和状态的抽象

3个版本

使用旧的Rust 2015

0.1.2 2017年7月17日
0.1.1 2017年7月16日
0.1.0 2017年7月16日

#2146数据结构

MIT/Apache

14KB
277

闭包

此crate提供了一种分离代码和状态的抽象。其中之一是允许使用递归闭包以及像 PartialEqClone 这样的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();
    }
}

无运行时依赖