< 返回版块

yueruijie 发表于 2021-06-06 22:09

Tags:rust生命周期声明

pub fn search<'a>(query: &str, contents: &'a str) -> Vec<&'a str> { let mut results = Vec::new(); for line in contents.lines() { if line.contains(query) { results.push(line);

} }

results }

返回值引用的生命周期不应该跟方法作用域外的传入方法的变量值保持一致吗,为什么参数还要再次声明生命周期 ?

评论区

写评论
7sDream 2021-06-07 11:38

哪些情况可以自动推断在 Reference 和 Nimicon 里都有介绍:

https://doc.rust-lang.org/reference/lifetime-elision.html https://doc.rust-lang.org/nomicon/lifetime-elision.html

苦瓜小仔 2021-06-06 23:27

也可能是编译器不够智能和完善,还不能持续或深入追踪理解引用。

或者做这些追踪可能需要更多工作,导致更长编译时间,所以就简单一些,自行标注。

这些都是我的猜测而已,对于使用者来说,如果编译器不能推断,就标注。

尤其 涉及引用的类型定义/函数签名定义,标注规则是很固定的,编译器肯定会首先去检查,缺少的话就不会通过。令可错杀一万,不可放过一个。hh

--
👇
yueruijie: 谢谢 ,是我想当然了,哈哈

--
👇
苦瓜小仔: 因为编译器没法推断你到底需要和哪个传入值(引用)保持一致的生命周期。

仔细去阅读:Rust book > ch10-03-lifetime-syntax

作者 yueruijie 2021-06-06 23:09

谢谢 ,是我想当然了,哈哈

--
👇
苦瓜小仔: 因为编译器没法推断你到底需要和哪个传入值(引用)保持一致的生命周期。

仔细去阅读:Rust book > ch10-03-lifetime-syntax

苦瓜小仔 2021-06-06 22:57

因为编译器没法推断你到底需要和哪个传入值(引用)保持一致的生命周期。

仔细去阅读:Rust book > ch10-03-lifetime-syntax

Mike Tang 2021-06-06 22:12

md格式化一下

1 共 5 条评论, 1 页