Я только что закончил читать "Книгу" и хотел начать с небольшого проекта в 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
...
Заранее спасибо, помогите мне понять, как работает право собственности!