gpt4 book ai didi

rust - 为什么在尝试为所有引用类型实现特征时会出现递归

转载 作者:行者123 更新时间:2023-12-03 08:19:22 27 4
gpt4 key购买 nike

我是 Rust 新手,在实现特征时遇到困难。如果我的处理方式错误,请告诉我。我正在尝试设置一个具有两个函数来访问值的特征。 get_value 似乎运行正常,但是当尝试使用 &mut 自引用设置 set_value 时,出现以下错误

warning: function cannot return without recursing
--> src\main.rs:7:5
|
7 | fn set_value(&mut self, new_value: bool) {
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ cannot return without recursing
8 | (*self).set_value(new_value);
| ---------------------------- recursive call site
|
= note: `#[warn(unconditional_recursion)]` on by default
= help: a `loop` may express intention better if this is on purpose

warning: 1 warning emitted

示例代码:

trait Trait1 {
fn set_value(&mut self, new_value: bool);
fn get_value(&self) -> bool;
}

impl<'a, T> Trait1 for &'a T where T: Trait1 {
fn set_value(&mut self, new_value: bool) {
(*self).set_value(new_value);
}
fn get_value(&self) -> bool {
(*self).get_value()
}
}

impl<'a, T> Trait1 for &'a mut T where T: Trait1 {
fn set_value(&mut self, new_value: bool) {
(**self).set_value(new_value)
}
fn get_value(&self) -> bool {
(**self).get_value()
}
}

struct Foo {
value: bool
}

impl Trait1 for Foo {
fn set_value(&mut self, new_value: bool) {
self.value = new_value;
}
fn get_value(&self) -> bool {
self.value
}
}

fn main() {

}

最佳答案

您遇到了递归错误,因为您只解引用了 self 一次,将其转换为 &T ——您当前尝试实现该特征的类型for -- 当你想要得到T时。如果像在 &mut T 的 impl 中那样取消引用两次,则不会收到该错误。

但是,您会收到另一个错误,即该实现不起作用。您不能只是解引用共享引用,然后从引用对象借用可变引用。 *self 是一个&T。无论您取消多少次引用,都无法从中获得 &mut T

关于rust - 为什么在尝试为所有引用类型实现特征时会出现递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68339276/

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