我的用例比这要复杂一些,但是我试图通过这个抽象示例来简化问题。
说我有一个结构:
struct Foo {
bar: u32,
baz: u32,
....
}
我该如何编写一个get_bar
函数来概括self
参数的可变性?
伪代码:
impl Foo {
fn<?PT> getBar(&PT self) -> &PT u32 where PT = {mut immut} {
&PT self.bar
}
}
如果使用可变指针调用,它将返回指向内部字段的可变指针;如果使用不可变的调用,则将返回不可变。
我的目标是基本上通过复制粘贴代码来避免定义每个函数的nonmut和mut版本:
impl Foo {
fn get_bar(&self) -> &u32 { &self.bar }
fn get_bar_mut(&mut self) -> &mut u32 { &mut self.bar }
}
如果函数的主体比这个复杂(我的情况是一个递归函数),它将变得非常讨厌,并且正在复制和粘贴很多代码,应避免某些事情。