Come creare una struttura con membri stringa? I membri dovrebbero essere di proprietà di struct object. Sono nuovo di ruggine, mi dispiace per la semplice domanda, ma non sono riuscito a trovare un esempio. C'era un esempio obsoleto con "~" che sembra essere deprecato ... Sto cercando la corretta dichiarazione di struct e quindi l'esempio di istanza.Rust: come creare una struct con i membri della stringa?
risposta
Se la stringa deve essere di proprietà della struttura, è necessario utilizzare String
. In alternativa, è possibile utilizzare &str
con una durata statica (ad esempio, la durata del programma). Per esempio:
struct Foo {
bar: String,
baz: &'static str,
}
fn main() {
let foo = Foo {
bar: "bar".to_string(),
baz: "baz",
};
println!("{}, {}", foo.bar, foo.baz);
}
Se la durata della stringa è sconosciuto, allora è possibile parametrizzare Foo
con una vita:
struct Foo<'a> {
baz: &'a str,
}
E se non siete sicuri se la stringa saranno di proprietà o no (utile per evitare assegnazioni), quindi è possibile utilizzare borrow::Cow
:
use std::borrow::Cow;
struct Foo<'a> {
baz: Cow<'a, str>,
}
fn main() {
let foo1 = Foo { baz: Cow::Borrowed("baz") };
let foo2 = Foo { baz: Cow::Owned("baz".to_string()) };
println!("{}, {}", foo1.baz, foo2.baz);
}
Nota che il tipo Cow
è ov parametrizzato er una vita. La durata si riferisce alla durata della stringa presa in prestito (ad esempio, quando è un Borrowed
). Se si dispone di un Cow
, è possibile utilizzare borrow
e ottenere uno &'a str
, con il quale è possibile eseguire le normali operazioni con le stringhe senza preoccuparsi di allocare una nuova stringa o meno. (In genere, esplicita chiamata di borrow
non è necessaria a causa di deref. Vale a dire, Cow
valori saranno Deref alla loro forma in prestito automaticamente. Così &*val
dove val
ha digitare Cow<'a, str>
produrrà un &str
.)
La sintassi ~
è infatti deprecato . La sostituzione di ~str
è String
, che si può pensare come un buffer di stringa (ad esempio, il contenuto della stringa è modificabile ed è espandibile). A &str
è una vista immutabile di una stringa che non può essere modificata nel codice di sicurezza.
Uhhh, grazie per la risposta completa. Devo pensare alla parametrizzazione per tutta la vita un altro giorno :) – vladimir
- 1. Come lavorare con i campi stringa in una struct C?
- 2. membri struct deprecate C++
- 3. di incremento membri struct
- 4. Come verificare i membri non utilizzati in struct?
- 5. Inizializza tutti i membri String con una stringa vuota
- 6. Come scrivere una stringa multilinea in Rust?
- 7. Creare un'interfaccia per i puntatori di funzioni C in Rust
- 8. _Alignas per membri della struct che usano clang & C11
- 9. visibilità predefinita dei membri della classe/struct C++
- 10. Riassumendo i membri struct all'interno di un vettore
- 11. Accesso membri struct e array di struct da LLVM IR
- 12. Disimballaggio di una struct che termina con una stringa ASCIIZ
- 13. Attributi personalizzati per i membri della classe
- 14. Una macro Rust può creare nuovi identificatori?
- 15. Membri della struttura Dirent
- 16. Perché non taglia i membri di struct parse?
- 17. Come arrivare membro struct con una stringa utilizzando le macro C++
- 18. Inversione di una stringa di Rust
- 19. Come ottenere nomi di campi struct in Rust?
- 20. Convertire una stringa in int in Rust?
- 21. I membri della struct non inizializzati sono sempre impostati su zero?
- 22. prefissi in nomi dei membri di una struct
- 23. C'è un modo per inizializzare i membri di una struct senza usare un costruttore?
- 24. Scopo della struct, typedef struct, in C++
- 25. implementare automaticamente i tratti di tipo chiuso per newtypes Rust (struct tupla con un solo campo)
- 26. I membri statici aiutano l'efficienza della memoria?
- 27. Come si memorizza una chiusura in Rust?
- 28. Come automatizzare i binding Java per il codice Rust?
- 29. I membri della classe statici sono bloccati?
- 30. Come dovrei creare un gestore di handle in Rust?
Utilizzare 'String' e tenere presente che la creazione di un' String' da '& str' tramite' .to_string() 'implica un'allocazione dell'heap + copiando l'intera stringa. – sellibitze