1 trait Noisy {
speak(&self)2 fn speak(&self);
3 }
4
5 struct Cat {
6 meows : usize,
7
8 how_hungry : isize,
9 name : String,
10 }
11
12 impl Cat {
eat(&self) -> bool13 pub fn eat(&self) -> bool {
14 if self.how_hungry > 0 {
15 println!("OM NOM NOM");
16 self.how_hungry -= 2;
17 return true;
18 }
19 else {
20 println!("Not hungry!");
21 return false;
22 }
23 }
24 }
25
26 impl Noisy for Cat {
speak(&self)27 fn speak(&self) { self.meow(); }
28
29 }
30
31 impl Cat {
meow(&self)32 fn meow(&self) {
33 println!("Meow");
34 self.meows += 1;
35 if self.meows % 5 == 0 {
36 self.how_hungry += 1;
37 }
38 }
39 }
40
cat(in_x : usize, in_y : isize, in_name: String) -> Cat41 fn cat(in_x : usize, in_y : isize, in_name: String) -> Cat {
42 Cat {
43 meows: in_x,
44 how_hungry: in_y,
45 name: in_name
46 }
47 }
48
49
50
main()51 fn main() {
52 let nyan: Box<dyn Noisy> = Box::new(cat(0, 2, "nyan".to_string())) as Box<dyn Noisy>;
53 nyan.eat(); //~ ERROR no method named `eat` found
54 }
55