Rust 对这个例子的理解
我是铁锈行业的新手,我仍然在铁锈行业挣扎一生。下面是我正在读的一本书中的一个例子。有人能解释一下为什么作者只需查看函数签名就可以获得这些信息吗?我已经对借阅、参考资料等有了基本的了解,但仍然不能理解 例如,假设我们有一个解析函数,它接受一个字节片,并返回一个包含解析结果的结构:Rust 对这个例子的理解,rust,lifetime,borrowing,Rust,Lifetime,Borrowing,我是铁锈行业的新手,我仍然在铁锈行业挣扎一生。下面是我正在读的一本书中的一个例子。有人能解释一下为什么作者只需查看函数签名就可以获得这些信息吗?我已经对借阅、参考资料等有了基本的了解,但仍然不能理解 例如,假设我们有一个解析函数,它接受一个字节片,并返回一个包含解析结果的结构: fn parse_record记录输入: input: &'i [u8] 他说: fn parse_record(input: &[u8]) -> Record 我是对一系列字节([u8])的引
fn parse_record记录输入:
input: &'i [u8]
他说:
fn parse_record(input: &[u8]) -> Record
我是对一系列字节([u8]
)的引用,这些字节的寿命至少与'I
一样长
所以,当我说我有这样一种类型:Record
)它包含一些东西(可能是引用,可能是其他东西),这些东西至少和'I
一样长的时间都依赖于某个东西
引用/structs/enum/任何东西上的生命周期告诉您的是,存在于'i
中的对象必须与我的生命周期一样长
换句话说,此函数签名告诉您记录
必须与输入
引用的字节一样长(引用下的u8
s,而不是引用本身)
缺少生存期参数最近被弃用,现在会导致警告,因此在阅读以下示例时请记住:
fn parse_record(input: &[u8]) -> Record
记录可能有一个生命周期,因此您必须查阅某种文档。compile desugars将此(警告要求您自己执行此操作)设置为:
fn parse_record(输入:&''[u8])->record该record
只能从函数体获取引用。从理论上讲,这些可能来自
input
中的值,这些值都是使用寿命'i
- 在
parse_记录
外部定义的值,该记录必须具有静态
生存期
parse\u记录中定义的值
。这些可能是
- 动态创建。这样的值将在函数作用域的末尾被删除,因此对它们的任何引用都将以悬空指针结束。因此,编译器不允许这样做
- 文字(
1
,“cat”
)。它们实际上被烘焙到二进制文件中,因此在函数外部有效地定义。在函数中,它们是静态的
引用
我不确定,因此我发表了评论,但这些信息可能来自显式生存期'I
。由于Rust不允许返回对局部变量的引用,并且记录
与输入
具有相同的生存期,这意味着记录
中的任何内容都必须来自输入
;具有所述生存期的值将在作用域结束时删除。因此,如果我们说Record
应该和我们命名的'i
范围内的值一样长,我们得到Record
fn parse_record(input: &'_ [u8]) -> Record<'_>