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



我对rust非常陌生,(仍在努力完成本书)并且正在用rust重写我用node.js编写的DNA搜索算法。到目前为止,我遇到的每一个错误都解决了,除了这个。我正试图编写一个函数,它需要一个DNA序列和一个3个字母的标志,并返回所有索引,在输入序列中找到该标志。

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。问题是,一旦函数返回flag_indices,在函数内部创建的引用(生存期为'a)也会被删除。因此,flag_indices现在包含被删除的引用。

最新更新