选项相对于其参数类型是不变的?

Option is invariant with respect to its argument type?

提问人:杨尚山 提问时间:10/20/2023 更新时间:10/20/2023 访问量:45

问:

当我阅读 rfcs-0738-variance 时,我对“选项相对于其参数类型是不变的”感到困惑。我认为它应该是协变的。此外,rfcs 中的代码中没有编译错误,但 rfcs 指出应该有“ERROR: Cannot 推断适当的生存期”。 我很困惑。感谢您的帮助。

#[derive(Debug)]
struct List<'l> {
    field1: &'l i32,
    field2: Option<&'l i32>,
}

fn foo<'a>(field1: &i32, field2: Option<&i32>) {
    let list = List { field1: field1, field2: field2 };
    // ERROR: Cannot infer an appropriate lifetime
    println!("{:?}", list);
}

fn main() {
}

希望得到答案。我也希望得到你对方差的理解。

评论

0赞 kmdreko 10/21/2023
在阅读任何 RFC 时,您都应该注意它创建时间的上下文(这个是在 2014-12-19 中引入的,在 Rust 1.0 之前)以及 RFC 是否被接受和实现(这个是,所以很明显,RFC 解决的问题代码将不再存在,希望如此)。

答:

2赞 Chayim Friedman 10/20/2023 #1

RFC 解释说,当前(即在此 RFC 之前),所有类型(包括 )都是不变的,因此此代码片段过去会失败。今天,随着这个RFC被接受和实施,情况不再如此(谢天谢地)。Option