問題一覧に戻る
中級ライフタイム
問題71: ライフタイム省略規則
Rustはライフタイム省略規則により明示的な注釈を減らします。規則1:各入力参照は独自のライフタイムを得る。規則2:入力ライフタイムが1つなら、すべての出力に割り当てられる。規則3:メソッドでは&selfのライフタイムが出力に割り当てられる。これらの規則により安全性を保ちながらコードが簡潔になります。
// 規則1: 1つの入力参照
fn first_word(s: &str) -> {
s.split_whitespace().next().unwrap_or("")
}
// 規則2: 複数の入力は明示的なライフタイムが必要
fn longest_of_two(x: &str, y: &str) -> {
if x.len() > y.len() { x } else { y }
}
struct Parser<'a> {
input: &'a str,
}
// 規則3: メソッドでは&selfのライフタイムが出力に
impl<'a> Parser<'a> {
fn parse(&self) -> {
self.input.split(',').next().unwrap_or("")
}
}
fn main() {
let text = "hello world";
println!("First word: {}", first_word(text));
let parser = Parser { input: "rust,programming" };
println!("Parsed: {}", parser.parse());
}