gpt4 book ai didi

rust - 为什么我不能借用我所借的东西,为什么我可以移动方法的自身?

转载 作者:行者123 更新时间:2023-12-03 11:41:37 28 4
gpt4 key购买 nike

我在用这个简单的例子苦苦挣扎:

use std::sync::atomic::{AtomicBool, Ordering};

pub struct C {
should_continue: AtomicBool
}

impl C {
fn a(self) -> bool{
self.should_continue.into_inner()
}
// fails
fn b(&self) -> bool{
self.should_continue.into_inner()
}
}

fn main() {
let c = C {
should_continue: AtomicBool::new(false),
};
}
我认为上述方法已翻译成这种伪语言:
fn a(c: C) -> bool {
// ...
}

fn b(c: &C) -> bool {
// ...
}
因此 c.a()应该是 a(c)c.b()应该是 b(&c)。我认为在Rust中, c.a()a(c)只是在移动。 c.b()b(&c)是借用的。
我认为 fn b(&self) -> bool中的错误是因为我试图向某人借一些我自己借的东西。我在这里没有看到问题,因为我可以等待 self.should_continue.into_inner()使用借入的值,以便可以返回借入的值。为什么我完全不能借用我借的东西?
现在,对于 fn a(self) -> bool,不给出错误在某种意义上是因为它移动了值,所以我可以自己借用它。但是,如何移动 self?移动是不会返回对象的东西。我将对象移动到此函数的内部,该对象不应再存在于其他位置。

最佳答案

I don't see a problem here because I can wait for self.should_continue.into_inner() to use the borrowed value so I can return the borrowed value. Why exactly I can't borrow something I borrowed?


没什么事查看 into_inner() 的文档,它需要一个 self参数,这意味着它会移动 AtomicBool。但是,您无法将 should_continue从共享的引用 &C中移出,因为这会使它处于无效状态。

However, how can I move self? Moving is something that does not return the object. I'm moving the object to the inside of this function, it should not exist elsewhere anymore.


考虑按所有权移动。调用 c.a()会将值的所有权从变量 c转移到参数 self。该值仍然存在,只是具有一个新名称。

关于rust - 为什么我不能借用我所借的东西,为什么我可以移动方法的自身?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64074374/

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