当 self 可变时返回可变引用,否则引用
Returning mutable reference when self is mutable, otherwise reference
我有以下 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
s。我能否以某种方式将它们转换为一个函数,该函数根据 self
的可变性导出我返回的引用的可变性?是否有某种我可以利用或类似的特征?
你不可能有一个单一的功能来实现这一点。然而,为了这个目的,使用相同函数的 _mut
个变体实际上是常规的(并且由 API guidelines 推荐):
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]
}
我有以下 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
s。我能否以某种方式将它们转换为一个函数,该函数根据 self
的可变性导出我返回的引用的可变性?是否有某种我可以利用或类似的特征?
你不可能有一个单一的功能来实现这一点。然而,为了这个目的,使用相同函数的 _mut
个变体实际上是常规的(并且由 API guidelines 推荐):
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]
}