9
我正在學習Rust中命名的生命週期,並且我很難理解它們在實現特徵時使用的表示。具體來說,我無法理解libserialize/hex.rs中的這段代碼。爲了簡潔起見,我刪除了一些評論。在特質實現中聲明時,生命週期引用了什麼?
pub trait ToHex {
fn to_hex(&self) -> ~str;
}
static CHARS: &'static[u8] = bytes!("abcdef");
impl<'a> ToHex for &'a [u8] {
fn to_hex(&self) -> ~str {
let mut v = slice::with_capacity(self.len() * 2);
for &byte in self.iter() {
v.push(CHARS[(byte >> 4) as uint]);
v.push(CHARS[(byte & 0xf) as uint]);
}
unsafe {
str::raw::from_utf8_owned(v)
}
}
}
我明白在煤焦定義'static
一輩子,但我難倒在ToHex實現中定義的壽命。 命名生命期在特質的實現中代表什麼?
真棒,現在對我來說事情變得更加有意義。當我說*所有引用都需要定義一個生命週期時,我是否正確?但是編譯器會在某些情況下自動添加它,如函數參數?我認爲這可能是我錯過的部分。 – TwentyMiles
確實如此。在大多數地方,它是自動確定的,如果沒有指定,內部函數參數是這種情況。 –
不是第二個示例無效,因爲該方法的生命週期隱藏了impl上的生命週期?除了在現在的Rust中是非法的,它也不一樣。或者我錯了?我是Rust的新手,還沒有完全理解生活。 –