为什么通过DerefMut可变地借用闭包是行不通的?

cha*_*pok 5 rust

我试图可变地借用一个可变变量。Deref并且DerefMut已针对实现Foo,但编译失败:

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

struct Foo;

impl Deref for Foo {
    type Target = FnMut() + 'static;
    fn deref(&self) -> &Self::Target {
        unimplemented!()
    }
}

impl DerefMut for Foo {
    fn deref_mut(&mut self) -> &mut Self::Target {
        unimplemented!()
    }
}

fn main() {
    let mut t = Foo;
    t();
}
Run Code Online (Sandbox Code Playgroud)
use std::ops::{Deref, DerefMut};

struct Foo;

impl Deref for Foo {
    type Target = FnMut() + 'static;
    fn deref(&self) -> &Self::Target {
        unimplemented!()
    }
}

impl DerefMut for Foo {
    fn deref_mut(&mut self) -> &mut Self::Target {
        unimplemented!()
    }
}

fn main() {
    let mut t = Foo;
    t();
}
Run Code Online (Sandbox Code Playgroud)

She*_*ter 5

这是一个关于如何通过Deref. 作为一种解决方法,您需要通过执行可变重新借用来显式获取可变引用:

let mut t = Foo;
(&mut *t)();
Run Code Online (Sandbox Code Playgroud)

或致电DerefMut::deref_mut

let mut t = Foo;
t.deref_mut()();
Run Code Online (Sandbox Code Playgroud)