при попытке использовать FnMut ругается borrow checker при компиляции?
И есть ли какой-то способ запинать версию с FnMut, кроме как перенести хэшмап callbacks из Node куда-нибудь в другое место?
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=e85519e63c320d7347366229948f752b
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=0660d8bf3298919d202c70a978c1244a
fn это указатель на функцию Fn/FnMut/FnOnce это трейты, которые по определенному владеют захваченными объектами. Подробнее в их описании написано
А то, что я хочу невозможно?
А fn какой из Fn реализует?
*совет дня* юзайте арки вообще там можно на время вызова сам хендлер из мапы мувать, либо как-то список хендлеров отдельно хранить
все три вроде
Fn. Его достаточно должно быть, так как Fn: FnMut: FnOnce
ну в итоге все три и реализует)
Конкретно здесь проблема не в FnMut. Ты берешь сначала ссылку иммутабельную на функцию, которая живёт столько же, сколько и &T. И пытаешься передать &mut T. У тебя одновременно живы мут и иммут ссылки. И да, ты dyn забыл у трейта дописать
пофиг в 2018 редакции)
Обсуждают сегодня