January 2018
Beginner to intermediate
454 pages
10h 8m
English
Traits can contain default methods, which can be convenient for the implementor of the trait since fewer methods will need to be implemented. Let's add a toggle() default method in the trait:
trait BitSet { fn clear(&mut self, index: usize); fn is_set(&self, index: usize) -> bool; fn set(&mut self, index: usize); fn toggle(&mut self, index: usize) { if self.is_set(index) { self.clear(index); } else { self.set(index); } } }
Since the new method has a body, we don't need to update our previous implementation. However, we could do it to provide a more efficient implementation, for instance:
impl BitSet for u64 { // The other methods are the same as before. fn toggle(&mut self, index: usize) { *self ^= 1 << index; } }
Read now
Unlock full access