Per cominciare, &String
è un tipo che non dovrebbe mai esistere in una firma; dovresti prendere il più generale &str
. String
è specificamente una stringa di proprietà, mentre &str
è una sezione di stringa. Poiché gli strumenti String
Deref<Target = str>
, &String
sono convertiti in &str
.
Quando si tratta di chiavi hash mappa, si dovrebbe anche prendere &str
piuttosto che &String
, e si dovrebbe evitare di prendere String
se tutto ciò che serve è &str
; non è necessario consumare la stringa. È possibile indicizzare uno HashMap<String, _>
con &str
bene.
Il tipo di stringa letterale è &'static str
; &'static str
sarà abbastanza felicemente costringere a &'a str
per qualsiasi 'a
, quindi è possibile utilizzare tranquillamente una stringa letterale vuota sul ramo None
. Ecco il risultato:
pub fn get_value(&self, value: &str) -> &str {
match self.os_config.get(value) {
Some(val) => val,
None => "",
}
}
Questo può anche essere scritta utilizzando il pratico unwrap_or
metodo:
Per questo motivo, la restituzione di un Option<&str>
non è forse così noioso; altri posti possono aggiungere .unwrap_or("")
se lo desiderano. Naturalmente, tutto dipende dalla semantica desiderata.
fonte
2015-07-16 22:12:45
Holy Cow, sono stato citato qui. ;-) Sentitevi liberi di copiare l'esempio qui. Cercherò di assicurarmi che il collegamento non vada esaurito, ma non si sa mai. – llogiq