查找字符串中的所有子字符串索引

Find all substring indices in string

我对 Rust 很陌生,(仍在努力阅读本书)并且正在用 Rust 重写我在 node.js 中编写的 DNA 搜索算法。到目前为止,我遇到的每个错误我都能够解决,除了这个错误。我正在尝试编写一个函数,它接受一个 DNA 序列和一个 3 个字母的标志,以及 returns 在输入序列中找到该标志的所有索引。

fn get_termination_flag_indices (input_sequence: String, flag: String) -> Vec<(usize, &'static str)> {
let flag_indices: Vec<_> = input_sequence.match_indices(&flag).into_iter().collect();

println!("{:?}", flag_indices);
flag_indices
}

我无法理解我收到的错误:

returns a value referencing data owned by the current function

我从一个非常高的层次理解它告诉我的是什么,但我不知道如何修复它。老实说,我还远远不够真正了解这里发生的事情。任何解释引擎盖下发生的事情的帮助都会非常有帮助。

这是我的解决方法(您可以将 flag 改成 &str 以使其变得更好,但这不是解决错误所必需的):

fn get_termination_flag_indices (input_sequence: &str, flag: String) -> Vec<(usize, &str)> {
    let flag_indices: Vec<_> = input_sequence.match_indices(&flag).into_iter().collect();
    
    println!("{:?}", flag_indices);

    flag_indices
}

以下是我认为导致错误的原因:

不幸的是,我的知识还不够确定,但这里是:

调用 match_indices 时,会在后台创建 input_sequence 的引用(match_indices 引用 self)。让我们给它一个 'a

的生命周期

之后,flag_indices 收集的 &str 具有相同的生命周期 'a。问题是一旦函数 returns 和 flag_indices,在函数内部创建的引用(生命周期 'a)也会被删除。因此 flag_indices 现在包含已删除的引用。