Почему фрагменты из String отличаются от тех, которые жестко закодированы как аргументы функции? - PullRequest
1 голос
/ 22 декабря 2019

Я только что закончил читать "Книгу" и хотел начать с небольшого проекта в Rust. В настоящее время я пытаюсь создать тесты для библиотеки, которые выглядят так:

pub mod api;

#[cfg(test)]
mod tests {
    use super::*;
    use std::env::var;

    fn create_blih<'a, 'b>() -> api::Blih<'a, 'b> {
        api::Blih::new("username", "password")
    }

    #[test]
    fn list_repositories() {
        create_blih().repository_list().unwrap();
    }

    ...

Я хотел удалить свои идентификаторы из кода и получить их из переменных среды, поэтому я изменил свой код следующим образом:

fn create_blih<'a, 'b>() -> api::Blih<'a, 'b> {
    let user = var("blih_user").expect("set blih_user env var");
    let pass = var("blih_pass").expect("set blih_pass env var");
    api::Blih::new(&user, &pass)
}

Мой код не компилируется с этой ошибкой error[E0515]: cannot return value referencing local variable для обеих переменных.

Я не понимаю, почему первый create_blih работает, но не второй, потому что я использую слайсыв обоих случаях.

Это может помочь:

pub struct Blih<'a, 'b> {
    base_url: &'b str,
    user: &'a str,
    user_agent: &'b str,
    password: &'a str,
    headers: HeaderMap,
}
impl<'a, 'b> Blih<'a, 'b> {
    pub fn new(user: &'a str, password: &'a str) -> Self
    ...

Заранее спасибо, помогите мне понять, как работает право собственности!

...