相关疑难解决方法(0)

如何避免在Rust中为可变和不可变引用编写重复的访问器函数?

有几次,我遇到了可变和不可变引用都需要访问器方法的场景.

对于~3行,复制逻辑不是问题,但是当逻辑变得更复杂时,复制粘贴大块代码并不好.

我希望能够重新使用这两个代码.

Rust是否提供了一些方法来处理这个更好的复制粘贴代码或使用unsafe强制转换?

例如:

impl MyStruct {
    pub fn get_foo(&self) -> &Bar {
        // ~20 lines of code
        // --- snip ---
        return bar;
    }
    pub fn get_foo_mut(&mut self) -> &mut Bar {
        // ~20 lines of code
        // (exactly matching previous code except `bar` is mutable)
        // --- snip ---
        return bar;
    }
}
Run Code Online (Sandbox Code Playgroud)

下面是一个代码库的更详细的摘录,其中一个不可变的返回参数被强制转换为可变的,以支持函数的不可变和可变版本.它使用包装指针类型(ConstP以及MutP用于不可变和可变引用),但函数的逻辑应该是清楚的.

pub fn face_vert_share_loop<V, F>(f: F, v: V) -> LoopConstP
    where V: Into<VertConstP>,
          F: Into<FaceConstP>
{
    into_expand!(f, v); …
Run Code Online (Sandbox Code Playgroud)

reference immutability rust

22
推荐指数
3
解决办法
1363
查看次数

标签 统计

immutability ×1

reference ×1

rust ×1