Tôi đang cố gắng viết một hàm gồm hai hàm, thiết kế ban đầu khá đơn giản, một hàm có hai hàm và trả về một hàm được tạo mà sau đó tôi có thể soạn với các hàm khác, (vì gỉ không có tham số còn lại). Nhưng tôi đã chạy vào một bức tường cứng dài được xây dựng với lỗi trình biên dịch không hữu ích bực bội.Làm thế nào để soạn chức năng trong gỉ?
chức năng soạn của tôi:
fn compose<'a, A, B, C, G, F>(f: F, g: G) -> Box<Fn(A) -> C + 'a>
where F: 'a + Fn(A) -> B + Sized, G: 'a + Fn(B) -> C + Sized
{
Box::new(move |x| g(f(x)))
}
Làm thế nào tôi muốn sử dụng nó:
fn main() {
let addAndMultiply = compose(|x| x * 2, |x| x + 2);
let divideAndSubtract = compose(|x| x/2, |x| x - 2);
let finally = compose(*addAndMultiply, *divideAndSubtract);
println!("Result is {}", finally(10));
}
rustc không như vậy, không có vấn đề gì tôi cố gắng, giới hạn đặc điểm là không bao giờ hài lòng. Lỗi này là:
➜ cargo run
Compiling flowtree v0.1.0 (file:///home/seunlanlege/Projects/flowtree)
error[E0277]: the trait bound `std::ops::Fn(_) -> _: std::marker::Sized` is not satisfied
--> src/main.rs:11:19
|
11 | let finally = compose(*addAndMultiply, *divideAndSubtract);
| ^^^^^^^ the trait `std::marker::Sized` is not implemented for `std::ops::Fn(_) -> _`
|
= note: `std::ops::Fn(_) -> _` does not have a constant size known at compile-time
= note: required by `compose`
error[E0277]: the trait bound `std::ops::Fn(_) -> _: std::marker::Sized` is not satisfied
--> src/main.rs:11:19
|
11 | let finally = compose(*addAndMultiply, *divideAndSubtract);
| ^^^^^^^ the trait `std::marker::Sized` is not implemented for `std::ops::Fn(_) -> _`
|
= note: `std::ops::Fn(_) -> _` does not have a constant size known at compile-time
= note: required by `compose`
error: aborting due to 2 previous errors
error: Could not compile `flowtree`.
To learn more, run the command again with --verbose.
Đối với các mục tiêu chính, bạn có thể tìm kiếm này: https://stackoverflow.com/q/36284637/1233251 –
không áp dụng cho trường hợp của tôi. –