Иногда я обнаружил, что хочу писать функции, которые могут быть вызваны одним из двух способов:
// 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<'a>(path: &'a str) -> ~[~str] {
let read_result = file_reader(~Path(path));
match read_result {
Ok(file) => file.read_lines(),
Err(e) => fail!(fmt!("Error reading file: %?", e))
}
}
Проблема в том, что я не понимаю, что делаю. Из того, что я могу собрать (в основном из ошибок компилятора), я объявляю время жизни, на котором нет ограничений, и используя его для описания параметра пути (что означает, что любое время жизни может быть передано как параметр).
Итак:
- Насколько я понимаю, я понимаю?
- Что такое жизнь? Где я могу узнать больше о них?
- В чем разница между параметром типа
&str
и параметром типа&'a str
в приведенном выше примере? - И пока я нахожусь, что это
'self
?
(я использую Rust 0.7, если это имеет значение для ответа)