blob: 2894eb63328912c587d5d0f82047c4e28d64c713 [file] [log] [blame]
Matthias Benkard848739c2019-02-28 13:59:58 +01001// Generic Programming: Dynamic Polymorphism
Matthias Benkardf3a3b302019-02-28 12:13:56 +01002
3#![allow(dead_code)]
4#![allow(unused_imports)]
5
6use rust_tutorial::*;
7
Matthias Benkard848739c2019-02-28 13:59:58 +01008fn stringify_all(xs: Vec<&dyn ToString>) -> String {
9 let strings: Vec<String> =
10 xs.iter().map(|x| x.to_string()).collect();
11
12 strings.join(", ")
13}
14
Matthias Benkardf3a3b302019-02-28 12:13:56 +010015fn main() {
Matthias Benkard848739c2019-02-28 13:59:58 +010016 let mut stringlike_things: Vec<&dyn ToString> = Vec::new();
17
18 let x1 = "abc";
19 let x2 = 100;
20 let x3 = Person { age: 30, name: "Mary".to_string() };
21
22 stringlike_things.push(&x1);
23 stringlike_things.push(&x2);
24 stringlike_things.push(&x3);
25
26 println!("{}", stringify_all(stringlike_things));
Matthias Benkardf3a3b302019-02-28 12:13:56 +010027}