@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с, но я не могу вынести вещи из коробки, насколько я знаю.

Как бы я использовал своих слушателей при коммите?

Ответы на вопрос(1)

Ваш ответ на вопрос