Tôi có một chút mã mà tôi đang chiến đấu. Đó là một hàm trợ giúp nhỏ sẽ trả về một hàm Vec<&str>
cho hàm gọi. Mặc dù tôi dường như không thể có được cả cuộc đời.Mở rộng Rust Lifetime
Dưới đây là đoạn mã:
fn take_symbol<'a>(ch: &'a str, current: &'a mut String) -> &'a mut TokenList<'a> {
let out = TokenList::<'a>::new();
out.push(current.as_str());
out.push(ch);
*current = String::new();
&mut out
}
Trình biên dịch là nói cho tôi: error: 'out' does not live long enough
và tài liệu tham khảo phải có giá trị cho các đời của 'a
, nhưng có vẻ với tôi như nó được định nghĩa cho 'a
.
Tôi cũng đã cố gắng thay đổi nó để:
let out = &mut TokenList::<'a>::new();
mà không thay đổi bất kỳ thông báo lỗi. Hoặc:
let out = &'a mut TokenList::<'a>::new();
trình biên dịch không thích gì cả.
Làm cách nào để xác định out
để có tuổi thọ là 'a
?
Để biết thêm chi tiết, đây là định nghĩa của tôi về TokenList:
pub type Token<'a> = &'a str;
pub type TokenList<'a> = Vec<Token<'a>>;
Tóm lại, thời gian sống chỉ mô tả thời gian sống của một cái gì đó, không bao giờ ảnh hưởng đến thời gian sống của nó. – delnan
Quá tệ. Đó sẽ là một tính năng tuyệt vời. Cảm ơn! – wmaxlees