匹配枚举引用并返回字符串导致“匹配臂具有不兼容的类型”

Gil*_*h22 -1 rust

我如何match在枚举引用上?我使用的依赖项返回对枚举的引用,我需要读取枚举包含的值。在下面的例子中,我关心的事情是分配final_valx

fn main() {
    let test_string = String::from("test");
    let option: std::option::Option<String> = Some(test_string);
    let ref_option = &option;

    let final_val = match ref_option {
        Some(x) => x,
        _ => String::from("not Set"),
    };

    println!("{:?}", final_val);
}
Run Code Online (Sandbox Code Playgroud)

如果我遵循编译器的建议并&在类型中添加 aSomeref x

fn main() {
    let test_string = String::from("test");
    let option: std::option::Option<String> = Some(test_string);
    let ref_option = &option;

    let final_val = match ref_option {
        &Some(ref x) => x,
        _ => String::from("not Set"),
    };

    println!("{:?}", final_val);
}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误,我不知道如何解决:

fn main() {
    let test_string = String::from("test");
    let option: std::option::Option<String> = Some(test_string);
    let ref_option = &option;

    let final_val = match ref_option {
        Some(x) => x,
        _ => String::from("not Set"),
    };

    println!("{:?}", final_val);
}
Run Code Online (Sandbox Code Playgroud)

Tim*_*ann 5

这不起作用。在第一只手臂上返回&String,在第二只手臂上返回String

如果你 clone x,它会起作用,但不清楚你真正想要什么。

let final_val = match ref_option {
    &Some(ref x) => x.clone(),
    _ => String::from("not Set"),
};
Run Code Online (Sandbox Code Playgroud)

操场

编辑:

我希望它是一个字符串

那么提到的解决方案就是要走的路。但是,如果您真的不需要 a String,则应该使用tafia 的解决方案

let final_val = match *ref_option {
    Some(ref x) => x,
    _ => "not Set",
};
Run Code Online (Sandbox Code Playgroud)

操场