Tôi muốn viết những dòng này:Trả về một giao diện Iterator đơn giản thay vì một bản đồ trong Rust
fn fibs() -> std::iter::Iterator<int> {
return std::iter::iterate((1i, 1i), |(a, b)| { (b, a + b) }).map(|(a, _)| a)
}
Nhưng nếu tôi làm, tôi nhận được lỗi này:
error: explicit lifetime bound required
fn fibs() -> std::iter::Iterator<int> {
^^^^^^^^^^^^^^^^^^^^^^^^
Nếu, thay vào đó tôi viết ra giao diện đầy đủ, nó biên dịch:
fn fibs() -> std::iter::Map<'static, (int, int), int, std::iter::Iterate<'static, (int, int)>> {
return std::iter::iterate((1i, 1i), |(a, b)| { (b, a + b) }).map(|(a, _)| a)
}
Có cách nào để trả về giao diện đơn giản hơn không?
Iterator là một đặc điểm và không phải là một kiểu. Tôi không biết nhiều về Rust nhưng tôi nghĩ bạn cần gói nó trong Box. Để trả về các kiểu trừu tượng không được hộp, chúng ta cần: https://github.com/rust-lang/rfcs/pull/105 – Simon