■ trait 키워드에서 트레잇의 기본 메소드를 만드는 방법을 보여준다.
▶ 예제 코드 (RS)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
trait TreasureBox { fn open(&self, key_number : i32) -> bool { self.get_key_number() == key_number } fn check(&self); fn get_key_number(&self) -> i32; } struct JewelryBox { price : i32, key_number : i32 } impl TreasureBox for JewelryBox { fn check(&self) { println!("보석 상자 : {} 골드", self.price); } fn get_key_number(&self) -> i32 { return self.key_number; } } struct EmptyBox { key_number : i32 } impl TreasureBox for EmptyBox { fn check(&self) { println!("빈 상자"); } fn get_key_number(&self) -> i32 { self.key_number } } fn open_box(treasure_box : &impl TreasureBox, key_number : i32) { if !treasure_box.open(key_number) { println!("적절한 열쇠가 아니라 상자가 열리지 않는다."); return; } treasure_box.check(); } fn main() { let jewelry_box1 : JewelryBox = JewelryBox { price : 30, key_number : 1 }; let empty_box1 : EmptyBox = EmptyBox { key_number : 1 }; let jewelry_box2 : JewelryBox = JewelryBox { price : 50, key_number : 2 }; open_box(&jewelry_box1, 1); open_box(&empty_box1 , 1); open_box(&jewelry_box2, 1); } /* 보석 상자 : 30 골드 빈 상자 적절한 열쇠가 아니라 상자가 열리지 않는다. */ |