有几次,我遇到了可变和不可变引用都需要访问器方法的场景.
对于~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)