Rust -- as_ref與borrow的區別


as_ref是什么?

as_ref是轉引用函數,將具有所有權對象轉換成引用對象,在不改變被轉換對象的基礎上產生一個引用對象。

as_ref並不是所有類型都默認支持,很多時候都需要自已去聲明。是AsRef trait的公共接口方法,只有那些實現了as_ref公共接口方法的類型才能使用as_ref,目前有:Option, BoxResult這三種類型默認提供支持as_ref。

borrow是什么?

允許owner把自已的擁用權“借出”,borrow實際上創建了到原始資源的reference,它是一種指針。

borrow分為兩種:immutable borrowmutable borrow,並且編譯器對於一個作用域里這兩種borrow的數量進行限制,從而避免讀寫的沖突。這里比較特殊的是mutable borrow,即&mut,它可以把owner綁定到新的資源。在通過mutable borrow改變owner綁定的目標時,會觸發owner最初綁定資源的釋放。

as_ref與Borrow的區別

  • 基礎數據類型引用

  Borrow可以直接在int, &str, String, vec, [], struct, enum 類型上直接指定&來引用。

  as_ref則不行,它需要聲明泛型 T:AsRef<int>, T: AsRef<str>, T:AsRef<struct name> 來支持。

  • 嵌套數據類型引用:Some(&int), Box(&int)

  Borrow必須在定義結構時聲明 Some<&int>, Box<&int> 才是引用。

  as_ref 則直接可以在這些嵌套結構上使用as_ref。

  • 引用的引用

  Borrow 引用的引用的表現形式是:&str->&&str

  as_ref 引用的引用的表現形式是:&str->&str


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM