gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 08:00:00 24 4
gpt4 key购买 nike

我有一个功能枚举向量。我想集体克隆这个载体。但是,我的 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();
}

最佳答案

fns 的Clone 当前实现 isn't complete , 所以这是不可能的,尽管它打算在某个时候修复。

与此同时,您可以做的一件事是将其放入 RcArc 之类的东西中,尽管需要额外的间接寻址,因为那是确实克隆

请看这个例子,它假定您需要线程安全,因此需要 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

关于rust - 克隆未在功能上实现...有时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30385954/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com