克隆未在功能上实现...有时
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
用于 fn
s isn't complete 的当前实现,所以这不可能按原样进行,尽管它打算在某个时候修复。
与此同时,您可以做的一件事是将其放入 Rc
或 Arc
之类的内容中,因为这确实是 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();
}
我有一个功能枚举向量。我想集体克隆这个载体。但是,我的 Action 枚举无法派生 Clone,因为没有为
实现 Clonefn(&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
用于 fn
s isn't complete 的当前实现,所以这不可能按原样进行,尽管它打算在某个时候修复。
与此同时,您可以做的一件事是将其放入 Rc
或 Arc
之类的内容中,因为这确实是 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();
}