我有以下方法来检查是否存在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
提供的相同的错误。
答案 0 :(得分:2)
一生都是描述性的,而不是规定性的。你没有设定寿命;它们是你编写的程序的结果。
您正尝试返回对局部变量的引用。这是无效的,并且没有生命周期可以写,以使其有效。
您有X / Y问题。真正的问题是为什么你觉得需要返回一个参考。
答案 1 :(得分:-3)
您需要关注变量的设置位置,而不是实际返回变量的位置。
在这种情况下,请将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
}
这可确保变量的初始类型具有生命周期,并将值作为参考提供,以确保变量具有正确的生命周期。