有条件避免双克隆

问题描述 投票:0回答:1

我有一个

check
方法,它获取(并且需要)我拥有的大向量的所有权,并输出一个布尔值。如果它输出 true,那么我将 structs 字段设置为该向量。它看起来像这样:

fn my_func(&mut self, v: Vec<u8>) {
    if self.check(v.clone()) {
        self.v = v;
    }
}

check
方法不能获取切片,即使可以,也只需将其克隆到里面,所以它不会解决任何问题。

我的问题是,只有在检查返回 true 并且我需要设置结构体的 v 字段时,有没有办法克隆

v
?因为目前,如果
check
返回 false,我就不必要地克隆了 v,它可能携带相当大的数据(大约 1 MB)。

rust clone
1个回答
0
投票

您可以修改

check
以获取 vec,然后除了 bool 之外还返回它(或作为
Result
)。然后它可以在内部决定是否需要克隆或者是否可以返回未修改的 vec。

© www.soinside.com 2019 - 2024. All rights reserved.