rust - 为什么我们必须借用变量的类型而不是名称

标签 rust borrow-checker ownership ampersand

在以下代码中:

struct Book {
    pages: i32,
    rating: i32,
}

fn display_page_count(book: &Book) {
    println!("Pages = {:?}", book.pages);
}

fn display_rating(book: &Book) {
    println!("Rating = {:?}", book.rating);
}

fn main() {
    let book = Book {
    pages: 5,
    rating: 9,
    };
    display_page_count(&book);
    display_rating(&book);
}
我们为什么要写 fn display_page_count(book: &Book)而不是 fn display_page_count(&book: Book) ?对我来说,book是我们稍后要借用的数据,Book只是一个类型(这里是 struct),所以我不明白为什么我们必须借用类型而不是变量或参数。有人能告诉我为什么我错了吗?

最佳答案

fn display_rating(book: &Book)声明,book是类型为 &Book 的变量的名称.
使用 fn display_rating(book: Book)表示法意味着所有权被传递给函数并且不返回它,它不能在外部作用域中使用。book: &Book意味着我们正在使用对变量的引用。在这种情况下 book可以有您想要的任何名称,因为它只是类型为 &Book 的变量的名称。 .

关于rust - 为什么我们必须借用变量的类型而不是名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69154933/

相关文章:

asynchronous - 在异步Rust中,如何实现围绕民意调查的包装?

rust - 当 Rust 中一个值覆盖另一个值时,堆栈上会发生什么?

c++ - 如何在 Windows 中更改文件的所有权

vector - 如何在 Rust 中提取字符串向量的元素?

rust - 如何从Rust调用原始地址?

rust - 为什么我不能通过 `std::assert` 导入 `use` 而它适用于来自 std 的其他宏?

rust - 如何在 Rust 中编写绑定(bind)到需要打开文件句柄的 C 函数?

rust - 如何在 BufReader 中包装实现 Read 和 Write 的结构的读取部分?

rust - 在模式匹配中借用

linux - Linux 中进程的所有权(给定 PID)