• 强制转换

    强制转换

    一个较长的生命周期可以强制转成一个较短的生命周期,使它在一个通常情况下不能工作的作用域内也能正常工作。这种形式出现在编译器推导强制转换的时候,也出现在声明生命周期不同的时候(原文:This comes in the form of inferred coercion by the Rust compiler,
    and also in the form of declaring a lifetime difference):

    1. // 在这里,Rust 推导了一个尽可能短的生命周期。
    2. // 然后这两个引用都被强制转成这个生命周期。
    3. fn multiply<'a>(first: &'a i32, second: &'a i32) -> i32 {
    4. first * second
    5. }
    6. // `<'a: 'b, 'b>` 理解为生命周期 `'a` 至少和 `'b` 一样长。
    7. // 在这里我们我们接受了一个 `&'a i32` 类型并返回一个 `&'b i32` 类型,这是
    8. // 强制转换得到的结果。
    9. fn choose_first<'a: 'b, 'b>(first: &'a i32, _: &'b i32) -> &'b i32 {
    10. first
    11. }
    12. fn main() {
    13. let first = 2; // 较长的生命周期
    14. {
    15. let second = 3; // 较短的生命周期
    16. println!("The product is {}", multiply(&first, &second));
    17. println!("{} is the first", choose_first(&first, &second));
    18. };
    19. }