struct Person {
name: String,
}
fn modify_name(person: &mut Person) {
person.name.push_str(" modified");
}
引用声明方式分析
- 不可变引用
&Person
:如果函数接收的是 &Person
,意味着对 Person
的只读访问。在 Rust 中,不可变引用不能用于修改其所指向的数据,因为这会违反 Rust 的借用规则(同一时间只能有一个可变引用,或者有多个不可变引用,但不能同时存在可变和不可变引用),所以这种方式不能实现对 name
的修改。
- 可变引用
&mut Person
:可变引用允许我们修改其所指向的数据。通过 &mut Person
,函数可以直接修改 Person
实例内部的 name
字段,符合题目要求。
所有权变化
- 所有权不发生转移:在 Rust 中,借用(无论是可变还是不可变)的核心概念是不转移所有权。当我们将
Person
的引用传递给 modify_name
函数时,调用者仍然拥有 Person
实例的所有权。函数只是在借用期间对数据有临时的访问权限,函数调用结束后,借用结束,调用者可以继续正常使用 Person
实例。所以,在整个过程中,Person
实例的所有权始终归调用者所有,没有发生所有权转移。