Я не могу увеличить значение внутри структуры.Я получаю много разных ошибок компиляции.У меня есть неизменяемая ссылка на self
, и я не могу сделать ее изменяемой.
Вот моя структура:
/// Proposer factory.
pub struct ProposerFactory<C, A>
where
A: txpool::ChainApi,
{
/// The client instance.
pub client: Arc<C>,
/// The transaction pool.
pub transaction_pool: Arc<TransactionPool<A>>,
/// The inherents pool
pub inherents_pool: Arc<InherentsPool<<A::Block as BlockT>::Extrinsic>>,
/// Current queue number
cur_queue_no_ptr: Arc<u64>,
}
Я хочу увеличить cur_queue_no_ptr
на + 1
Я попробовал этот код:
let old_value_ref = Arc::get_mut(&mut self.cur_queue_no_ptr).unwrap();
let old_value = *old_value_ref;
let new_value = old_value + 1;
, но получил эту ошибку:
152 | let old_value_ref=Arc::get_mut(&mut self.cur_queue_no_ptr).unwrap();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ `self` is a `&` reference, so the data it refers to cannot be borrowed as mutable
Я попробовал этот код:
let copied_arc = Arc::clone(&self.cur_queue_no_ptr);
let old_value = *Arc::make_mut(&mut copied_arc);
let new_value = old_value + 1;
И еще одна ошибка:
150 | let old_value = *Arc::make_mut(&mut copied_arc);
| ^^^^^^^^^^^^^^^ cannot borrow as mutable
Я также пытался с RefCell
, но я получаю эту ошибку:
^^^^^ `std::cell::RefCell<u64>` cannot be shared between threads safely
Видимо, примеры в документах будут работать только для переменных, но не для структур, так как высделать это со структурами?