Вот пример кода, в котором я тестирую два &str
s и возвращаю один из них:
fn bad_longest(s1: &str, s2: &str) -> &str {
if s1.len() >= s2.len() { s1 } else { s2 }
}
Он не компилировал запрос явного времени жизни, поэтому я предоставил их:
fn longest<'r, 'a, 'b>(s1: &'a str, s2: &'b str) -> &'r str
where
'a: 'r,
'b: 'r
{
if s1.len() >= s2.len() { s1 } else { s2 }
}
Теперь следующий тест проходит без проблем:
static STATIC: &str = "123";
fn main() {
let auto = "123456";
let dyn_ = String::from("123456789");
println!(
"{}",
longest(
longest(STATIC, auto),
dyn_.as_str()
)
);
}
Вот мой вопрос: разве время жизни, которое я указал вручную, не выводятся из контекста? Мне не хватает каких-либо вариантов использования?