问题1

在Rust 中,这两种功能有什么不同?

fn foo<'a>(x: &'a i32) -> &'a i32 {
    x
}
fn foo<'a: 'b, 'b>(x: &'a i32) -> &'b i32 {
    x
}

问题2

当在多个函数参数之间以及在返回值中使用相同的生命周期 参数'a时,提供了什么约束?

fn foo<'a>(x: &'a i32, y: &'a i32) -> &'a i32 {
    ...
}

推荐答案

据我所知,有两点不同:

  • 第二个生命有两个可以不同的生命周期,第一个生命周期只有一个.
  • 第二本书的生命周期 是early-bound年,第一本书的出版时间较晚.有一些不同之处,主要的一个是您不能创建具有早期绑定生存期的HRTB函数指针(let f: fn(&i32) -> &i32 = foo2;不能编译).

您几乎总是想要(1),因为它不那么冗长,并且允许HRTB.

2.

人的一生是所有生命中最小的.忽略问题1中的点,这等同于:

fn foo<'a, 'b: 'a, 'c: 'a>(x: &'b i32, y: &'c i32) -> &'a i32 {
    ...
}

Rust相关问答推荐

为什么父作用域中的变量超出了子作用域

空字符串转换为Box字符串时是否分配?<>

泛型属性比较

如何对字符串引用的引用向量进行排序,而不是对最外层的引用进行排序?

什么是Rust惯用的方式来使特征向量具有单个向量项的别名?

如何创建引用构造函数拥有的变量的对象?

Rust类似功能是C++命名空间吗?

有没有办法指定只在Rust的测试中有效的断言?

为什么TcpListener的文件描述符和生成的TcpStream不同?

`RwLockWriteGuard_,T`不实现T实现的特征

如果死 struct 实现了/派生了一些特征,为什么Rust会停止检测它们?

什么时候使用FuturesOrdered?

为什么不';t(&;mut-iter).take(n)取得iter的所有权?

这个不安全的 Rust 代码有什么问题,所以它可以在 Windows 上运行,但不能在 Ubuntu 上运行?

.在 Rust 模块标识符中

将 &str 或 String 保存在变量中

在Rust中实现Trie数据 struct 的更好方式

方法可以被误认为是标准特性方法

从嵌入式 Rust 中的某个时刻开始经过的时间

SDL2 没有在终端键上触发?