【发布时间】:2013-07-03 15:57:39
【问题描述】:
有时我发现自己想编写可以通过以下两种方式之一调用的函数:
// 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,如果它对答案有影响的话)
【问题讨论】:
-
我对生命周期没有足够的信心来回答你的问题。不过,我可以告诉你
"data.txt"的类型是&'static str,这是一个静态分配的字符串。