我对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
现在包含被删除的引用。