gpt4 book ai didi

rust - 如何修复缺少的生命周期说明符?

转载 作者:行者123 更新时间:2023-11-29 07:52:37 25 4
gpt4 key购买 nike

我有一个很简单的方法。第一个参数接受向量分量 ("A", 5, 0),我将把它与另一个向量的每个元素进行比较,看看它们是否具有相同的 (_, 5, _),然后打印出找到的元素的字符串。

比较 ("A", 5, 0 ) 和 ("Q", 5, 2) 应该打印出 Q。

fn is_same_space(x: &str, y1: i32, p: i32, vector: &Vec<(&str, i32, i32)>) -> (&str) {
let mut foundString = "";

for i in 0..vector.len() {

if y1 == vector[i].1 {
foundString = vector[i].0;
}

}
foundString
}

但是,我得到了这个错误

error[E0106]: missing lifetime specifier
--> src/main.rs:1:80
|
1 | fn is_same_space(x: &str, y1: i32, p: i32, vector: &Vec<(&str, i32, i32)>) -> (&str) {
| ^ expected lifetime parameter
|
= help: this function's return type contains a borrowed value, but the signature does not say whether it is borrowed from `x` or one of `vector`'s 2 elided lifetimes

最佳答案

通过指定生命周期:

fn is_same_space<'a>(x: &'a str, y1: i32, p: i32, vector: &'a Vec<(&'a str, i32, i32)>) -> (&'a str)

这只是您对函数的含义的许多可能解释之一,因此这是一个非常保守的选择 - 它使用所有引用参数的统一生命周期。

也许你想返回一个与 x 或与 vector 一样长或与 vector 中的字符串一样长的字符串;所有这些都可能有效。


强烈建议您回去重新阅读The Rust Programming Language .它是免费的,针对 Rust 初学者,它涵盖了使 Rust 独一无二并且对程序员来说是新手的所有内容。许多人在这本书上花费了很多时间,它回答了许多初学者的问题,比如这个问题。

具体来说,您应该阅读以下章节:

甚至还有一个 second edition in the works , 章节如下:


为了好玩,我会使用迭代器重写您的代码:

fn is_same_space<'a>(y1: i32, vector: &[(&'a str, i32, i32)]) -> &'a str {
vector.iter()
.rev() // start from the end
.filter(|item| item.1 == y1) // element that matches
.map(|item| item.0) // first element of the tuple
.next() // take the first (from the end)
.unwrap_or("") // Use a default value
}

关于rust - 如何修复缺少的生命周期说明符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43330616/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com