小编Com*_*ake的帖子

Rust,如何返回对结构中与结构一样长的内容的引用?

我正在将我编写的编译器移植到 Rust。在其中,我有一个枚举Entity,它代表函数和变量之类的东西:

pub enum Entity<'a> {
  Variable(VariableEntity),
  Function(FunctionEntity<'a>)
  // Room for more later.
}
Run Code Online (Sandbox Code Playgroud)

然后,我有一个结构体Scope,负责在哈希映射中保存这些实体,其中键是程序员为实体指定的名称。(例如,声明一个名为 name 的函数sin会将 an 放Entity入哈希映射中的 key 处sin。)

pub struct Scope<'a> {
    symbols: HashMap<String, Entity<'a>>,
    parent: Option<&'a Scope<'a>>
}
Run Code Online (Sandbox Code Playgroud)

我希望能够获得对 HashMap 中对象的只读引用,以便我可以从其他数据结构中引用它。例如,当我解析函数调用时,我希望能够存储对正在调用的函数的引用,而不仅仅是存储函数的名称,并且每次需要对应的实际对象时都必须查找Entity引用到名字。为此,我制定了以下方法:

impl<'a> Scope<'a> {
  pub fn lookup(&self, symbol: &str) -> Option<&'a Entity<'a>> {
    let result = self.symbols.get(symbol);
    match result {
      Option::None => match self.parent {
        Option::None => Option::None,
        Option::Some(parent) => parent.lookup(symbol),
      },
      Option::Some(_value) => …
Run Code Online (Sandbox Code Playgroud)

lifetime rust

5
推荐指数
1
解决办法
4354
查看次数

标签 统计

lifetime ×1

rust ×1