我试图可变地借用一个可变变量。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)
这是一个关于如何通过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)