當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Rust DerefMut用法及代碼示例


本文簡要介紹rust語言中 Trait core::ops::DerefMut 的用法。

用法

pub trait DerefMut: Deref {
    fn deref_mut(&mut self) -> &mut Self::Target;
}

用於可變的取消引用操作,例如 *v = 1;

除了用於(一元)的顯式取消引用操作*可變上下文中的運算符,DerefMut在許多情況下,編譯器也會隱式使用。這種機製稱為'Deref 強製'.在不可變的上下文中,core::ops::Deref被使用。

實施DerefMut對於智能指針來說,可以方便地改變它們背後的數據,這就是它們實現的原因DerefMut。另一方麵,有關規則core::ops::DerefDerefMut專門為適應智能指針而設計。因為這,DerefMut 隻能針對智能指針實現以避免混淆。

出於類似的原因,這個特質永遠不應該失敗。取消引用期間的失敗可能會非常令人困惑DerefMut被隱式調用。

更多關於 Deref 強製

如果 T 實現了 DerefMut<Target = U> ,並且 xT 類型的值,則:

  • 在可變上下文中,*x(其中 T 既不是引用也不是原始指針)等價於 *DerefMut::deref_mut(&mut x)
  • &mut T 類型的值被強製轉換為 &mut U 類型的值
  • T 隱式實現 U 類型的所有(可變)方法。

欲了解更多詳情,請訪問中的章節Rust 編程語言以及參考部分解引用運算符,方法解析類型強製.

例子

具有單個字段的結構,可通過取消引用該結構來修改。

use std::ops::{Deref, DerefMut};

struct DerefMutExample<T> {
    value: T
}

impl<T> Deref for DerefMutExample<T> {
    type Target = T;

    fn deref(&self) -> &Self::Target {
        &self.value
    }
}

impl<T> DerefMut for DerefMutExample<T> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.value
    }
}

let mut x = DerefMutExample { value: 'a' };
*x = 'b';
assert_eq!('b', *x);

相關用法


注:本文由純淨天空篩選整理自rust-lang.org大神的英文原創作品 Trait core::ops::DerefMut。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。