我有以下片段的Rust:
pub fn scope(&mut self) -> &mut HashMap<String, Type> {
let idx = self.vars.len() - 1;
&mut self.vars[idx]
}
我已经意识到我有一些上下文,我想在函数的非可变版本中使用此函数,例如:
pub fn scope(&self) -> &HashMap<String, Type> {
let idx = self.vars.len() - 1;
&self.vars[idx]
}
这两个函数之间只删除了3个mut
。我可以以某种方式将这些变成一个函数,根据self
的可变性,导出我返回的引用的可变性吗?是否有某种特性我可以使用或类似?
答案 0 :(得分:5)
你不可能有一个功能来实现这一目标。但是,实际上(并API guidelines推荐)为此目的使用相同函数的_mut
变体是实际的:
pub fn scope(&self) -> &HashMap<String, Type> {
let idx = self.vars.len() - 1;
&self.vars[idx]
}
pub fn scope_mut(&mut self) -> &mut HashMap<String, Type> {
let idx = self.vars.len() - 1;
&mut self.vars[idx]
}