我有以下方法来检查String
ID是否存在。如果没有,请生成然后返回:
fn generate_id(&self) -> ID<'m> {
let id = nanoid::generate(15);
while self[&id].is_some() {
id = nanoid::generate(15);
};
id
}
ID
是一种类型的别名: type ID<'id> = &'id String;
返回值需要为&'m std::string::String
,但id
是std::string::String
。
我尝试过:
let id: ID<'m> = nanoid::generate(15);
,但随后给出了该方法仅针对id
的错误。
寿命是描述性的,而不是规定。您没有设定一生;它们是您编写的程序的结果。
您正在尝试返回对本地变量的引用。那是无效的,没有生命周期可以使其有效。
您有一个X/Y问题。真正的问题是为什么您觉得需要返回参考。
您需要专注于设置变量的位置,而不是实际返回变量的位置。
在这种情况下,将nanoid::generate(15);
更改为&nanoid::generate(15);
:
fn generate_id(&self) -> ID<'m> {
let id: ID<'m> = &nanoid::generate(15);
while self[&id].is_some() {
id = &nanoid::generate(15);
};
id
}
这确保了变量的初始类型具有寿命,并提供值作为参考确保变量具有正确的寿命。