Явная пометка у ссылки в Rust
Когда функция возвращает ссылку на текст, компилятор должен понять, чей срок она не превышает. Если оба аргумента - ссылки на строки, а результат тоже ссылка, у всех трех мест ставят одну и ту же пометку. Тогда возвращаемый кусок не переживет ни одну из исходных строк.
Если пометки у параметров и результата разойдутся без причины, сборка покажет несогласованность. Результат не может жить дольше самого короткого из связанных с ним входов.
Запишем функцию, которая отдает более длинный из двух фрагментов:
fn longest<'a>(a: &'a str, b: &'a str) -> &'a str {
if a.len() >= b.len() {
a
} else {
b
}
}
fn main() {
let first = String::from("go");
let second = String::from("rust");
let pick = longest(first.as_str(), second.as_str());
println!("{}", pick);
}
Даны две переменные:
let left = String::from("ab");
let right = String::from("abc");
Допишите функцию с двумя общими ссылками на строки и результатом-ссылкой, которая возвращает более длинный фрагмент, и выведите ее результат.
Дана сигнатура без тела:
fn head(a: &str, b: &str) -> &str;
Скажите, чего не хватает для функции, которая возвращает одну из входных ссылок, и что нужно добавить в типы.
Даны фрагменты:
let x = String::from("one");
let y = String::from("two");
let z = longest(x.as_str(), y.as_str());
Объясните, до какого момента можно
читать через z после этого блока.