fn concat_frobs_from_vec_dynamic1(frobbers: Vec<&dyn Frobber>) -> String {
    // Probably not the most efficient implementation!
    frobbers
        .iter()
        .map(|frobber| frobber.frob())
        .collect::<Vec<_>>()
        .join(";")
}
/// `concat_frobs_from_vec_dynamic1` is a single concrete function. It consumes
/// a vector of references to objects implementing `Frobber`. Each element of
/// the vector could potentially be a different type. Therefore, this is a
/// _heterogeneous_ vector.
`concat_frobs_from_vec_dynamic1` is a single concrete function. It consumes
a vector of references to objects implementing `Frobber`. Each element of
the vector could potentially be a different type. Therefore, this is a
_heterogeneous_ vector.
` concat_frobs_from_vec_dynamic1 ` is a single concrete function . It consumes a vector of references to objects implementing ` Frobber ` . Each element of the vector could potentially be a different type . Therefore this is a _heterogeneous_ vector .
fn concat_frobs_from_vec_dynamic1(frobbers: Vec<&dyn Frobber>) -> String {
    // Probably not the most efficient implementation!
    frobbers
        .iter()
        .map(|frobber| frobber.frob())
        .collect::<Vec<_>>()
        .join(";")
}
fn concat_frobs_from_vec_dynamic1 ( frobbers : Vec < & dyn Frobber > ) -> String { // Probably not the most efficient implementation! frobbers . iter ( ) . map ( | frobber | frobber . frob ( ) ) . collect :: < Vec < _ > > ( ) . join ( " " ) }
`concat_frobs_from_vec_dynamic1` is a single concrete function.
` concat_frobs_from_vec_dynamic1 ` is a single concrete function .
frobbers
Vec<&dyn Frobber>
frobbers
Vec<&dyn Frobber>