Reference 有没有办法避免结构内部的mut而不是mut引用的重复代码?

Reference 有没有办法避免结构内部的mut而不是mut引用的重复代码?,reference,rust,mutability,Reference,Rust,Mutability,以下是我想要实现的目标: trait Foo { fn readonly(&self) -> i32; fn modify(&mut self, val: i32); } struct FooWrapper<'a> { foo: &'a Foo, } impl<'a> FooWrapper<'a> { fn readonly(&self) -> i32 { self

以下是我想要实现的目标:

trait Foo {
    fn readonly(&self) -> i32;
    fn modify(&mut self, val: i32);
}

struct FooWrapper<'a> {
    foo: &'a Foo,
}

impl<'a> FooWrapper<'a> {
    fn readonly(&self) -> i32 {
        self.foo.readonly()
    }

    fn modify(&mut self, val: i32) {
        self.foo.modify(val);//!!!
    }
}

只需将
foo
作为可变引用即可。然后它可以可变地或不可变地借用

struct FooWrapper<'a> {
    foo: &'a mut Foo,
}

现在,您可以将类型参数提供为
&mut Foo
或只是
&Foo
,具体取决于您所拥有的内容。

只需将
Foo
作为可变引用即可。然后它可以可变地或不可变地借用

struct FooWrapper<'a> {
    foo: &'a mut Foo,
}

现在,您可以将类型参数提供为
&mut-Foo
或只是
&Foo
,具体取决于您所拥有的。

“只是将Foo设置为可变引用”我不能,如果我将
&Foo
作为输入,如何从中构造
&mut-Foo
?请参见
func
作为示例。您可能需要包含更多的代码来解释您的问题,并表明它与副本(如果是)不同。“只需将foo设置为可变引用”我不能,如果我将
&foo
作为输入,如何从中构造
&mut foo
?请参见
func
作为示例。您可能需要包含更多代码来解释您的问题,并表明它与重复的代码(如果是)不同。但正如您看到的编译器不允许使用代码一样,您需要包含完整的编译器错误。简单地说发生了错误是不可接受的,但正如您看到的编译器不允许代码一样,您需要包含完整的编译器错误。不能简单地说发生了错误。
trait Foo {
    fn readonly(&self) -> i32;
    fn modify(&mut self, val: i32);
}

struct FooWrapper<T> {
    foo: T,
}

impl <'a> FooWrapper<&'a Foo> {
    fn readonly(&self) -> i32 {
        self.foo.readonly()
    }
}

impl <'a> FooWrapper<&'a mut Foo> {
    fn modify(&mut self, val: i32) {
        self.foo.modify(val); //
    }
}