From 5e941877fe0619497aced26243123b0c853b517d Mon Sep 17 00:00:00 2001 From: Steve Klabnik Date: Fri, 29 May 2015 12:37:18 -0400 Subject: [PATCH] Add syntax for multiple lifetimes Fixes #25417 --- src/doc/trpl/lifetimes.md | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/src/doc/trpl/lifetimes.md b/src/doc/trpl/lifetimes.md index 04ae4c7ccf3cc..580960b7e8029 100644 --- a/src/doc/trpl/lifetimes.md +++ b/src/doc/trpl/lifetimes.md @@ -134,8 +134,29 @@ x: &'a i32, # } ``` -uses it. So why do we need a lifetime here? We need to ensure that any -reference to the contained `i32` does not outlive the containing `Foo`. +uses it. So why do we need a lifetime here? We need to ensure that any reference +to a `Foo` cannot outlive the reference to an `i32` it contains. + +If you have multiple references, you can use the same lifetime multiple times: + +```rust +fn x_or_y<'a>(x: &'a str, y: &'a str) -> &'a str { +# x +# } +``` + +This says that `x` and `y` both are alive for the same scope, and that the +return value is also alive for that scope. If you wanted `x` and `y` to have +different lifetimes, you can use multiple lifetime parameters: + +```rust +fn x_or_y<'a, 'b>(x: &'a str, y: &'b str) -> &'a str { +# x +# } +``` + +In this example, `x` and `y` have different valid scopes, but the return value +has the same lifetime as `x`. ## Thinking in scopes