假设我有一个结构如下:
struct Employee {
name: String
}
API 中的两个函数分别接受和返回
Employee
:
fn add_employee_to_database(employee: &Employee) { }
fn get_employee_from_database() -> Employee { }
如您所见,当我
add_employee_to_database
时,我不需要 Employee
的所有权,因为我不需要读取它的组件并将其保存到数据库中。
但是,当我
Employee
时,我确实将 get_employee_from_database
的所有权放弃给调用者,因为当我从数据库中完成创建它时,它需要移出我的 API 的范围。
但是,同样的灵活性不适用于
Employee
的领域。 Employee.name
拥有它的 String
无论如何。
这种设计在与
add_employee_to_database
交互时给调用者带来了一点麻烦。调用者必须将 String
的所有权放弃给 Employee.name
,即使 API 不需要出于 add_employee_to_database
的目的。调用者可以只 clone
String
,但这不是免费的,性能方面。或者,调用者可以放开 String
并开始通过 Employee
对象引用它,但这会引入一小层样板。
我该如何解决这个问题?