Rust 我怎样才能在《铁锈》中建立一个词汇库?

Rust 我怎样才能在《铁锈》中建立一个词汇库?,rust,Rust,我有一个应用程序,它处理组成更大句子的词素。我正在各地克隆这些词素,但它们并不稀薄,许多词素在不同的句子中反复出现 我的计划是编写一个“词典”,它将存储词素,并可以查询它们的组成部分。如果它们不存在,它将创建它们,并返回对它们的引用。这样,我就可以参照词素而不是词素来造句 为简单起见,假设词素由2个字符串组成。下面的代码说明了我想要什么,但是测试失败了,因为我只能借用一次可变的词典。所以我的问题是,这里的正确策略是什么 #![feature(hash_set_entry)] use std::

我有一个应用程序,它处理组成更大句子的词素。我正在各地克隆这些词素,但它们并不稀薄,许多词素在不同的句子中反复出现

我的计划是编写一个“词典”,它将存储词素,并可以查询它们的组成部分。如果它们不存在,它将创建它们,并返回对它们的引用。这样,我就可以参照词素而不是词素来造句

为简单起见,假设词素由2个
字符串组成。下面的代码说明了我想要什么,但是测试失败了,因为我只能借用一次可变的词典。所以我的问题是,这里的正确策略是什么

#![feature(hash_set_entry)]

use std::collections::HashSet;

#[derive(Debug, Clone, PartialEq, Eq, Hash)]
struct Lexeme {
    name: String,
    text: String,
}

struct Lexicon {
    lexemes: HashSet<Lexeme>,
}

impl Lexicon {
    pub fn get(&mut self, name: String, text: String) -> &Lexeme {
        let lexeme = Lexeme { name, text };
        self.lexemes.get_or_insert(lexeme)
    }
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn test_1() {
        let mut lexicon = Lexicon {
            lexemes: HashSet::new(),
        };
        let lex1 = lexicon.get("name1".to_string(), "text1".to_string());
        let _ = lexicon.get("name2".to_string(), "text2".to_string());
        let lex3 = lexicon.get("name1".to_string(), "text1".to_string());
        assert_eq!(lex1.name, lex3.name);
    }
}
()

<编辑>添加链接到我认为正确答案的链接(如@ SePrimter注释中所指出的):


你能更好地解释一下这里的问题是什么吗?“你问的是借钱还是打拳击?”塔德曼:好吧,问题是关于任何有助于实现既定目标的策略,我不知道打拳击是否会有帮助……看来你的问题可能会由……的答案来回答。如果没有,请回答您的问题以解释差异。否则,我们可以将此问题标记为已回答。您要查找的术语是。@Shepmaster是的,看来您已经解决了这个问题。谢谢你能更好地解释一下这里的问题是什么吗?“你问的是借钱还是打拳击?”塔德曼:好吧,问题是关于任何有助于实现既定目标的策略,我不知道打拳击是否会有帮助……看来你的问题可能会由……的答案来回答。如果没有,请回答您的问题以解释差异。否则,我们可以将此问题标记为已回答。您要查找的术语是。@Shepmaster是的,看来您已经解决了这个问题。谢谢