gpt4 book ai didi

rust - 为什么派生的 clone() 方法返回一个引用?

转载 作者:行者123 更新时间:2023-11-29 07:48:07 26 4
gpt4 key购买 nike

<分区>

为包含对泛型对象的引用的结构派生 Clone 特征(除非它绑定(bind)了 Clone。在这种情况下,克隆会按预期工作)将生成 clone() 方法,它返回对对象的引用而不是新对象。

我有代码:

#[derive(Clone)]
struct A<'a, T: 'a>{
ref_generic: &'a T
}

fn test_call<'a, T: 'a>(a: &A<'a, T>)->A<'a, T>{
a.clone()
}

这会导致错误:

error[E0308]: mismatched types
--> src/lib.rs:15:5
|
14 | fn test_call<'a, T: 'a>(a: &A<'a, T>)->A<'a, T>{
| -------- expected `A<'a, T>` because of return type
15 | a.clone()
| ^^^^^^^^^ expected struct `A`, found &A<'_, T>
|
= note: expected type `A<'a, T>`
found type `&A<'_, T>`

为什么 derive 会这样?

以下手动实现可以避免这种障碍但令人不快。

impl<'a, T: 'a> Clone for A<'a, T>{
fn clone(&self)->Self{
A{ref_generic: self.ref_generic}
}
}

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