■ 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 |
trait TreasureBox { fn open(&self, key_number : i32) -> bool; fn check(&self); } struct JewelryBox { price : i32, key_number : i32 } impl TreasureBox for JewelryBox { fn open(&self, key_number : i32) -> bool { return self.key_number == key_number; } fn check(&self) { println!("보석 상자 : {} 골드", self.price); } } struct TrapBox { damage : i32 } impl TreasureBox for TrapBox { fn open(&self, _key: i32) -> bool { return true; } fn check(&self) { println!("함정 상자 : 감소 HP {}", self.damage); } } 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 trap_box1 : TrapBox = TrapBox { damage : 3 }; let jewelry_box2 : JewelryBox = JewelryBox { price : 20, key_number : 2 }; let key_number : i32 = 2; open_box(&jewelry_box1, key_number); open_box(&trap_box1 , key_number); open_box(&jewelry_box2, key_number); } /* 적절한 열쇠가 아니라 상자가 열리지 않는다. 함정 상자 : 감소 HP 3 보석 상자 : 20 골드 */ |