gpt4 book ai didi

rust - 为 Cell 中保存的目标类型实现 Deref

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

我有一个实现Deref的结构:

pub struct Foo {
val: u8,
}

impl Deref for Foo {
type Target = u8;

fn deref(&self) -> &u8 {
&self.val
}
}

我想在内部更改结构,以便将值保存在 Cell 中:

pub struct Foo {
val: Cell<u8>,
}

我天真地实现了 Deref 如下:

impl Deref for Foo {
type Target = u8;

fn deref(&self) -> &u8 {
&self.val.get()
}
}

编译器提示说 &self.val.get() 的生命周期不够长,这大部分对我来说很有意义(Cell 不是是 Copy 类型?),但我不知道如何让它编译。我尝试过使用生命周期进行注释,但我的直觉感觉并不正确,此时我只是在盲目地更改内容。

最佳答案

Cell 通过永远不允许您获得对内部值的不可变引用来允许内部可变性。 get返回值的副本,get_mut仅当您有一个可变引用开始时才有效。

因为你所能得到的只是一个值,所以有 no way to return a reference to a local value ,没有办法为这种类型实现 Deref


如果您认为可以通过使用 RefCell 来“欺骗”编译器,其实您做不到,但是您可以包装它生成的 Ref 类型:

关于rust - 为 Cell 中保存的目标类型实现 Deref,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43333835/

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