我正在从这本Rust 的书中了解生命.
一个简单的问题,
以下代码给出了一个正确的预期错误:
fn check_check() {
let r;
{
let s = String::from("s");
r = check(&s); // says s does not live long enough
}
println!("{}", r);
}
fn check<'a>(s: &'a str) -> &'a str {
return s;
}
这是因为我已经提到了check函数中的生存期与参数相同.所以这很好,我理解这一点.
按照同样的逻辑,当我编写这段代码时,它不会给出任何错误.
这是我不明白的,这是怎么编译的?
fn check_check() {
let r;
{
let s = "a";
r = check(&s); // works just fine, why? and how?
}
println!("{}", r);
}
fn check<'a>(s: &'a str) -> &'a str {
return s;
}