以下のコードでは実装の唯一の違いはprintln!
です。多くの構造体の1つの特性の同様の実装
私は2つの全く異なる実装を書く必要がないように感じていますが、方法は見つけられません。
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},
}
}
}
}
実装では、私は両方のために実装するためにマクロを使用することができ、正確に同一です。私は「マクロコンディショナリティー」
回答ありがとうございます。これを試してみます – user3920439