小编AC-*_*C-5的帖子

Rust 中的生命周期如何影响可变性?

我正在通过显式注释函数签名来测试我对 Rust 生命周期的理解,并且我创建了一个我不确定我是否理解的示例。

在这个例子中,我模拟了共享一本书并在其中翻页的概念。为此,我使用了一个可变引用,我将其传递给一个borrow_and_read更新结构curr_page字段的Book函数。我的Book结构和main函数看起来像:

#[derive(Debug)]
pub struct Book<'a> {
    pub title: &'a str,
    pub curr_page: Option<i32>,
    pub page_count: i32,
}

fn borrow_and_read<'a>(a_book: &'a mut Book<'a>) {
    match a_book.curr_page {
        Some(page) => a_book.curr_page = Some(page + 1),
        None => a_book.curr_page = Some(0),
    };
}

fn main() {
    let mut the_book: Book = Book {
        title: "The Book",
        curr_page: None,
        page_count: 104,
    };

    let a_book: &mut Book = &mut the_book;

    borrow_and_read(a_book);
    borrow_and_read(a_book); …
Run Code Online (Sandbox Code Playgroud)

immutability lifetime mutability rust borrow-checker

5
推荐指数
1
解决办法
106
查看次数

如何使用 Ansible 收集有关磁盘的事实

我正在尝试编写一个 Ansible playbook,它将识别 RHEL 机器上新添加的磁盘。计划是在创建新磁盘之前运行剧本并在该时间点缓存磁盘作为事实。创建新磁盘后,将再次运行相同的 playbook,并计算创建磁盘前后磁盘的差异。

例如,lsblk最初返回以下内容:

NAME              SIZE  TYPE
sda               100G  disk
??sda1              1G  part
??sda2             99G  part
  ??rhel-root      50G  lvm
  ??rhel-swap     7.9G  lvm
  ??rhel-home    41.1G  lvm
sr0              1024M  rom

Run Code Online (Sandbox Code Playgroud)

添加 8 个新磁盘后,lsblk返回:

NAME              SIZE  TYPE
sda               100G  disk
??sda1              1G  part
??sda2             99G  part
  ??rhel-root      50G  lvm
  ??rhel-swap     7.9G  lvm
  ??rhel-home    41.1G  lvm
sdb              18.6G  disk
sdc              18.6G  disk
sdd              18.6G  disk
sde              18.6G  disk
sdf              18.6G  disk
sdg              18.6G  disk
sdh              18.6G  disk …
Run Code Online (Sandbox Code Playgroud)

ansible ansible-facts

3
推荐指数
1
解决办法
1万
查看次数

如何将元素推入向量向量中的最后一个向量?

我试图访问向量向量 ( Vec<Vec<u32>>) 中的最后一个向量并向其推送一个值,但我仍然遇到错误。我想做的事情的简化版本是:

let mut pc: Vec<Vec<u32>> = vec![];

pc.push(vec![1]);

pc.last().unwrap().push(2);
Run Code Online (Sandbox Code Playgroud)

我得到的错误是:

error[E0596]: cannot borrow data in a `&` reference as mutable                                                                  
   |                                                                                                                            
   |         pc.last().unwrap().push(2);                                                                                        
   |         ^^^^^^^^^^^^^^^^^^ cannot borrow as mutable
Run Code Online (Sandbox Code Playgroud)

我尝试取消引用unwrap():的结果,(*(pc.last().unwrap())).push(2);但错误仍然存​​在。

预期的行为是一个类似于: 的嵌套向量[[1, 2]]

rust

2
推荐指数
1
解决办法
907
查看次数