克隆未在功能上实现...有时

Clone not implemented on function... sometimes

我有一个功能枚举向量。我想集体克隆这个载体。但是,我的 Action 枚举无法派生 Clone,因为没有为

实现 Clone
fn(&mut Vec<i32>)

如果是

就有效
fn(Vec<i32>)

虽然。好像不太喜欢借用他们参数的fns。为什么是这样?我有办法做到这一点吗?

#[derive(Clone)]
enum Action {
    Function (fn(&mut Vec<i32>))
}
fn pop(vec:&mut Vec<i32>) {
    let _ = vec.pop();
}
fn main() {
    let actions = vec![ Action::Function(pop), Action::Function(pop) ];
    let actions_copy = actions.to_vec();
}

Clone 用于 fns isn't complete 的当前实现,所以这不可能按原样进行,尽管它打算在某个时候修复。

与此同时,您可以做的一件事是将其放入 RcArc 之类的内容中,因为这确实是 Clone.

请参阅此示例,该示例假设您需要线程安全,因此 Arc,尽管在您的情况下一个简单的 Rc 可能就足够了:

use std::sync::Arc;

#[derive(Clone)]
enum Action {
    Function (Arc<fn(&mut Vec<i32>)>)
}
fn pop(vec:&mut Vec<i32>) {
    let _ = vec.pop();
}
fn main() {
    let actions = vec![ Action::Function(Arc::new(pop)), Action::Function(Arc::new(pop)) ];
    let actions_copy = actions.to_vec();
}

playpen