@Lucretiel Да, ответ (и, вероятно, вопрос) был написан с учетом особенностей объекта.
я есть следующий эскиз реализации:
trait Listener {
fn some_action(&mut self);
fn commit(self);
}
struct FooListener {}
impl Listener for FooListener {
fn some_action(&mut self) {
println!("{:?}", "Action!!");
}
fn commit(self) {
println!("{:?}", "Commit");
}
}
struct Transaction {
listeners: Vec<Box<Listener>>,
}
impl Transaction {
fn commit(self) {
// How would I consume the listeners and call commit() on each of them?
}
}
fn listener() {
let transaction = Transaction {
listeners: vec![Box::new(FooListener {})],
};
transaction.commit();
}
я могу иметьTransaction
с слушателями на них, которые будут вызывать слушателя, когда что-то происходит в этой транзакции. посколькуListener
это черта, я хранюVec<Box<Listener>>
.
Мне трудно реализоватьcommit
заTransaction
, Каким-то образом я должен потреблять коробки, позвонивcommit
на каждом из хранящихсяListener
с, но я не могу вынести вещи из коробки, насколько я знаю.
Как бы я использовал своих слушателей при коммите?