Время жизни в Русте
Изредка яЯ обнаружил, что хочу написать функции, которые можно вызывать двумя способами:
// With a string literal:
let lines = read_file_lines("data.txt");
// With a string pointer:
let file_name = ~"data.txt";
let lines = read_file_lines(file_name);
Моим первым предположением было использование заимствованного указателя (&str
) для типа параметра, но когда это неработать (это позволило мне использовать только@str
а также~str
), Я попробовал следующее (скопировав библиотеки Rust), которое сработало.
fn read_file_lines ~[~str] {
let read_result = file_reader(~Path(path));
match read_result {
Ok(file) => file.read_lines(),
Err(e) => fail!(fmt!("Error reading file: %?", e))
}
}
Проблема в том, что я нене понимаю, что яя делаю. Из того, что я могу собрать (в основном из ошибок компилятора), я 'm объявляет время жизни, на которое нет ограничений, и использует его для описания параметра пути (что означает, что любое время жизни может быть передано в качестве параметра).
Так:
Является ли мое понимание неопределенно точным?Что такое жизнь? Где я могу узнать о них больше?В чем разница между параметром типа&str
и параметр типа&'a str
в приведенном выше примере?И пока ям, что это?'self
(Я'м с использованием Rust 0.7, если это имеет значение для ответа)