簡體   English   中英

如何從HashMap獲取可變結構?

[英]How to get mutable struct from HashMap?

我有一個針對我所有狀態的HashMap<String, Rc<State>> ,它是HashMap<String, Rc<State>> ,我想調用當前狀態的成員fn init(&mut self) 但是我在以下代碼中遇到了錯誤:

...
if let Some(state) = self.states.get_mut(state_id) {
    (*state).init();
}
...

這是錯誤:

src/main.rs:70:25: 70:33 error: cannot borrow immutable borrowed content as mutable
src/main.rs:70                         (*state).shutdown();`

從文檔來看,問題在於get_mut返回對該狀態的可變引用,而不是對可變狀態的引用。 那么我如何獲得對可變狀態的引用?

Rust中的一個基本思想是: 別名或可變性,但不能同時存在。

混疊意味着具有指向相同值的多個活動指針。

什么是Rc<T> 它共享所有權,給值起別名。 因此, Rc<T>不允許對內部的值進行突變。

使用Rc可以解決此問題,可以將內部可變性Cell<U>RefCell<U>類的類型一起使用。

(如果編寫多線程程序,則將Arc用於線程安全共享所有權/別名,而可以將Mutex<U>用於線程安全內部可變性。)

  • Rc<Cell<U>>允許突變U通過只允許寫入和讀出,但沒有指針到內U值。 沒有指針,沒有鋸齒!

  • Rc<RefCell<U>>允許通過方法.borrow_mut()進行.borrow_mut() ,該方法將在運行時保留借用計數,並動態確保任何可變借用都是排他的。 沒有別名,您具有可變性!

鏈接

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM