Kompilator jest informacją, że niemożliwe jest, aby powrócić do [T]
.
rdza należące wektory (Vec<T>
) plasterków (&[T]
) i macierze o stałym rozmiarze ([T; n]
gdzie n
jest nieujemną liczbę całkowitą, jak 6
).
Plasterek składa się ze wskaźnika do danych i długości. Oto, jakie są twoje wartości left
i right
. Jednak to, co jest określone w plasterku, to nie jest to, który ostatecznie jest właścicielem danych. Plasterki po prostu wypożyczają dane z czegoś innego. Możesz traktować &
jako sygnał, że dane są pożyczane.
A Vec
to jedna rzecz, która jest właścicielem danych i pozwala innym rzeczy pożyczać je za pomocą plasterka. Aby rozwiązać problem, musisz przydzielić trochę pamięci do przechowywania wartości, a Vec
robi to za ciebie. Możesz następnie zwrócić cały numer Vec
, przekazując własność dzwoniącemu.
Określony komunikat o błędzie oznacza, że kompilator nie wie, ile miejsca należy przydzielić dla typu [i32]
, ponieważ nigdy nie było przeznaczone do bezpośredniego przydzielania. Ten błąd dotyczy innych rzeczy w Rust, zazwyczaj gdy próbujesz usunąć obiekt z cechy cechy, ale to wyraźnie różni się od przypadku tutaj.
Oto najbardziej prawdopodobne naprawić chcesz:
fn merge(left: &[i32], right: &[i32]) -> Vec<i32> {
let mut merged = Vec::new();
// push elements to merged
merged
}
Dodatkowo, nie trzeba określać wcieleń tutaj, i usunąłem zbędne typ adnotacji na zgłoszeniu merged
.