Tôi muốn sử dụng Peekable
làm cơ sở cho hoạt động cautious_take_while
hoạt động như take_while
từ IteratorExt
nhưng không tiêu thụ mục không thành công đầu tiên. (Có một câu hỏi phụ là liệu đây có phải là một ý hay hay không và liệu có cách nào tốt hơn để hoàn thành mục tiêu này trong Rust), tôi rất vui vì những gợi ý theo hướng đó, nhưng chủ yếu là tôi đang cố hiểu mã của tôi ở đâu phá vỡ).Thực hiện lệnh "thận trọng" khi sử dụng Peekable
API Tôi đang cố gắng để cho phép cơ bản là:
let mut chars = "abcdefg.".chars().peekable();
let abc : String = chars.by_ref().cautious_take_while(|&x| x != 'd');
let defg : String = chars.by_ref().cautious_take_while(|&x| x != '.');
// yielding (abc = "abc", defg = "defg")
Tôi đã lấy một vết nứt ở creating a MCVE here, nhưng tôi nhận được:
:10:5: 10:19 error: cannot move out of borrowed content :10 chars.by_ref().cautious_take_while(|&x| x != '.');
Theo như tôi có thể nói , Tôi đang theo cùng một mẫu như của riêng Rust của TakeWhile
về chữ ký chức năng của tôi, nhưng tôi thấy hành vi khác nhau khác nhau từ kiểm tra vay. Ai đó có thể chỉ ra những gì tôi đang làm sai?
Cảm ơn @rodrigo! Tôi đã kết hợp đề xuất đầu tiên của bạn để tạo một ví dụ làm việc tại http://is.gd/NalTYL. Nhưng khi tôi cố gắng đưa cách gõ vào cấu trúc, như trong http://is.gd/6c64vf, tôi nhận được 'lỗi: đặc điểm * core :: clone :: Clone * không được triển khai cho loại * & mut core: : iter :: Peekable * ', điều mà tôi không thể vượt qua bằng cách thêm' + Clone' vào giới hạn đặc điểm trong dòng 43. –
Bosh
@Bosh. Không chắc chắn, nhưng tôi nghĩ rằng một con trỏ có thể thay đổi không thể được nhân bản. Biến thể của bạn chấp nhận 'Clone' có lẽ vì' Peekable' ngụ ý 'Clone' một cách rõ ràng. Có lẽ bạn có thể làm tương tự, nhưng mã sẽ cần một số tái cấu trúc ... – rodrigo
Tuyệt vời. Tôi đã ngừng phát sinh từ 'Clone' và dọn dẹp các mốc thời gian: http://is.gd/ljjJAE. Một lần nữa xin cảm ơn sự giúp đỡ của bạn + giải thích! – Bosh