Generic data structures and functions
Genericity is the capacity to write code once, with types not or partly specified, so that the code can be used for many different types. Rust has this capacity in abundance, applying it for both data structures and functions.
A composite data structure is generic if the type of its items can be of a general type <T>
. The type T
can for example be an i32
value, an f64
, a String
, but also a struct
type like Person
that we have coded ourselves. So, we can have a vector Vec<f64>
, but also a vector Vec<Person>
. If you make T
a concrete type, then you must substitute the type T
with that type everywhere T
appears in the definition of the data structure.
Our data structure can be parametrized with a generic type <T>
, and so has multiple concrete definitions--it is polymorphic. Rust makes extensive use of this concept, which we encountered already in Chapter 4, Structuring Data and Matching Patterns when we talked about arrays, vectors...