如何设置返回值的生命周期?

时间:2018-03-30 21:53:59

标签: rust lifetime

我有以下方法来检查是否存在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提供的相同的错误。

2 个答案:

答案 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
}

这可确保变量的初始类型具有生命周期,并将值作为参考提供,以确保变量具有正确的生命周期。

相关问题