如何设置返回值的生存期?



我有以下方法来检查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,但idstd::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
}

这确保了变量的初始类型具有寿命,并提供值作为参考确保变量具有正确的寿命。

最新更新