gpt4 book ai didi

struct - 我怎样才能使某些结构字段可变?

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

我有一个结构:

pub struct Test {
pub x: i32,
pub y: i32,
}

我想要一个函数来改变它——很简单:

pub fn mutateit(&mut self) {
self.x += 1;
}

这使得整个结构在 mutateit 的函数调用期间可变,对吗?我想改变x,我不想改变y。有什么方法可以可变地借用 x 吗?

最佳答案

引用 The Book :

Rust does not support field mutability at the language level, so you cannot write something like this:

struct Point {
mut x: i32, // This causes an error.
y: i32,
}

您需要内部可变性,这在 the standard docs 中有很好的描述:

use std::cell::Cell; 

pub struct Test {
pub x: Cell<i32>,
pub y: i32
}

fn main() {
// note lack of mut:
let test = Test {
x: Cell::new(1), // interior mutability using Cell
y: 0
};

test.x.set(2);
assert_eq!(test.x.get(), 2);
}

而且,如果您想将它合并到一个函数中:

impl Test {
pub fn mutateit(&self) { // note: no mut again
self.x.set(self.x.get() + 1);
}
}

fn main() {
let test = Test {
x: Cell::new(1),
y: 0
};

test.mutateit();
assert_eq!(test.x.get(), 2);
}

关于struct - 我怎样才能使某些结构字段可变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47748091/

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