我正在通过显式注释函数签名来测试我对 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) 我正在尝试编写一个 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) 我试图访问向量向量 ( 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]]。