带寿命和借用->参数的Rust问题要求'a'必须比'static'长

wkftcu5l  于 2023-03-18  发布在  其他
关注(0)|答案(1)|浏览(142)

我想运行在此定义的测试:

fn run<'a>(args: &[&str], expected_value: &'a str) -> TestResult {
    Command::cargo_bin("echor")?
    .args(args)
    .assert()
    .success()
    .stdout(expected_value);
    Ok(())
}

#[test]
fn hello2() -> TestResult {
    let expected = "Hello there\n";
    run(&["Hello there"], expected)
}

我收到一个错误:

|   fn run<'a>(args: &[&str], expected_value: &'a str) -> TestResult {
   |          --                 -------------- `expected_value` is a reference that is only valid in the function body
   |          |
   |          lifetime `'a` defined here
32 | /     Command::cargo_bin("echor")?
33 | |     .args(args)
34 | |     .assert()
35 | |     .success()
36 | |     .stdout(expected_value);
   | |                           ^
   | |                           |
   | |___________________________`expected_value` escapes the function body here
   |                             argument requires that `'a` must outlive `'static`

这是我开始生 rust ,我不知道如何处理这个问题。你能描述一下我做错了什么吗?我尝试了很多方法,改变为字符串类型和转换为字符串。但没有任何效果。

esyap4oy

esyap4oy1#

Stdout需要一个静态的参数,这个参数是随程序而活的,但是你给予它一个有寿命的引用,你可以给它一个引用,把它转换成一个字符串,然后把它给stdout方法;如下所示:

fn run<'a>(args: &[&str], expected_value: &'a str) -> TestResult {
    let expected_value_static = expected_value.to_string();
    Command::cargo_bin("echor")?
        .args(args)
        .assert()
        .success()
        .stdout(expected_value_static);
    Ok(())
}

相关问题