当self是可变的时返回可变引用,否则引用

lfx*_*ove 0 traits mutability rust

我有以下片段的Rust:

pub fn scope(&mut self) -> &mut HashMap<String, Type> {
    let idx = self.vars.len() - 1;
    &mut self.vars[idx]
}
Run Code Online (Sandbox Code Playgroud)

我已经意识到我有一些上下文,我想在函数的非可变版本中使用此函数,例如:

pub fn scope(&self) -> &HashMap<String, Type> {
    let idx = self.vars.len() - 1;
    &self.vars[idx]
}
Run Code Online (Sandbox Code Playgroud)

mut两个功能之间只删除了3 秒.我可以以某种方式将这些变成一个函数,根据可变性来推导我返回的引用的可变性self吗?是否有一些我可以使用或类似的特征?

E_n*_*ate 5

你不可能有一个功能来实现这一目标.但是,为此目的,实际上是传统的(并且由API指南推荐)具有_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]
}
Run Code Online (Sandbox Code Playgroud)