Tôi đang học Rust ngay bây giờ và có vẻ như tôi không thể chỉ định đóng cửa làm thông số chức năng. Dưới đây là những gì tôi có:Không thể vượt qua đóng cửa làm tham số
fn foo(a: i32, f: |i32| -> i32) -> i32 {
f(a)
}
fn main() {
let bar = foo(5, |x| { x + 1 });
println!("{}", bar);
}
tôi nhận được lỗi sau:
foo.rs:1:19: 1:20 error: expected type, found `|`
foo.rs:1 fn foo(a: i32, f: |i32| -> i32) -> i32 {
Được rồi, vì vậy nó không thích cú pháp đóng cửa. Điều này thật khó chịu, bởi vì bây giờ tôi phải viết điều này:
fn foo(a: i32, f: Box<Fn(i32) -> i32>) -> i32 {
f(a)
}
fn main() {
let bar = foo(5, Box::new(|x| { x + 1 }));
println!("{}", bar);
}
Vậy điều gì đang xảy ra? Tôi đã đọc trong một vài khác nhau places rằng ví dụ đầu tiên là hợp lệ, do đó, đã được loại bỏ "loại tham số loại" cú pháp này, hoặc tôi chỉ làm điều gì đó sai?
[RFC 114] (https://github.com/rust-lang/rfcs/blob/master/text/0114-closures.md) phù hợp hơn với thay đổi này so với RFC 231, nhưng chi tiết về RFC 114 không phải là hiện tại (ví dụ, 'Fn' bây giờ là' FnMut' và 'FnShare' bây giờ là' Fn'). –
* đánh dấu rõ ràng chúng là không được dùng nữa * - hoặc chỉ yêu cầu người trả lời khác cập nhật câu trả lời^_ ^. Tôi đã làm như vậy, và nó đã được cập nhật sau vài phút. Bây giờ, câu hỏi này có nên được đánh dấu là trùng lặp không? – Shepmaster
Tôi không có tâm trí, nhưng thay vào đó là các bài đăng trên blog, nơi nội dung không phải là nội dung có thể cập nhật cộng đồng. Nó thậm chí có thể là không mong muốn; ví dụ như các bài đăng trên blog của Niko Matsakis có nhiều thông tin hơn về quy trình suy nghĩ - bạn sẽ giữ nó như một tài liệu tham khảo lịch sử chứ không phải là một tài liệu cập nhật. – mdup