为什么我们必须借用类型而不是变量名
Why must we borrow the type and not the name of the variable
在下面的代码中:
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
.
的变量的名字
因为这是声明变量的名称,而不是标记类型。
声明时,所有变量必须是纯名称,名称不能是引用。
变量前&
和& mut
标记的情况,只是标记变量的类型,而不是名称。
这是因为您刚刚为对象命名。更改的是对象的类型,而不是名称。
在下面的代码中:
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
.
因为这是声明变量的名称,而不是标记类型。
声明时,所有变量必须是纯名称,名称不能是引用。
变量前&
和& mut
标记的情况,只是标记变量的类型,而不是名称。
这是因为您刚刚为对象命名。更改的是对象的类型,而不是名称。