В приведенном ниже коде единственное отличие в реализации заключается в println!
.Аналогичные реализации одного признака для многих структур
Похоже, что для меня не должно быть необходимости выписывать две совершенно разные реализации, однако я не нашел пути.
pub trait ChangeDecision{
fn change_decision(&mut self);
}
impl ChangeDecision for Hero{
fn change_decision(&mut self){
self.should_change_decision = false;
let rand_num = rand::thread_rng().gen_range(1, 101) as f32/100.;
let mut prob_counter = 0.0;
for (action, prob) in &mut self.decisions.iter(){
prob_counter += *prob;
match prob_counter{
p if rand_num > p => {},
_ => {println!("{}: {:?}", self.name, action); self.current_decision = *action; break},
}
}
}
}
impl ChangeDecision for Team{
fn change_decision(&mut self){
self.should_change_decision = false;
let rand_num = rand::thread_rng().gen_range(1, 101) as f32/100.;
let mut prob_counter = 0.0;
for (action, prob) in &mut self.decisions.iter(){
prob_counter += *prob;
match prob_counter{
p if rand_num > p => {},
_ => {println!("{:?}: {:?}", self.side, action); self.current_decision = *action; break},
}
}
}
}
Когда реализации точно идентичны, я могу использовать макрос для реализации для обоих. т.е.
macro_rules! impl_SimilarStuff {
($T:ident) => {
impl SimilarStuff for $T{
fn my_func(&mut self){
true
}
}
}
}
impl_SimilarStuff!(ThingOne);
impl_SimilarStuff!(ThingTwo);
Однако я не смог найти ни одного примера «макро» обусловленность
благодарит за ответ. Попробуй это – user3920439