Новый Rustacean, как я, борется с жонглированием этими типами: String
, &str
, Vec<u8>
, &[u8]
.
Вовремя, я надеюсь, что у вас есть прозрение и вдруг выясните, почему некоторые вызовы библиотеки используют тот или иной. До тех пор мне нужна помощь в определении каждого идиоматического перехода.
Учитывая эти типы:
let st: &str = ...;
let s: String = ...;
let u: &[u8] = ...;
let v: Vec<u8> = ...;
Я думаю, что я понял это, но они идиоматичны?
&str -> String String::from(st)
&str -> &[u8] st.as_bytes()
String -> &str s.as_str()
&[u8] -> &str str::from_utf8(u)
Vec<u8> -> String String::from_utf8(v)
В конечном итоге я хочу получить полную таблицу переходов для этих типов:
&str -> String
&str -> &[u8]
&str -> Vec<u8>
String -> &str
String -> &[u8]
String -> Vec<u8>
&[u8] -> &str
&[u8] -> String
&[u8] -> Vec<u8>
Vec<u8> -> &str
Vec<u8> -> String
Vec<u8> -> &[u8]