मैं एक फ़ंक्शन लिखने की कोशिश कर रहा हूं जो दो कार्यों को लिखता है, प्रारंभिक डिज़ाइन एक ऐसा फ़ंक्शन है जो दो कार्यों को लेता है और एक रचनात्मक फ़ंक्शन देता है जिसे मैं अन्य कार्यों के साथ लिख सकता हूं, (चूंकि जंग के पास बाकी पैरामीटर नहीं हैं)। लेकिन मैं निराशाजनक गैर-सहायक कंपाइलर त्रुटियों के साथ निर्मित एक लंबी हार्ड दीवार में चला गया हूं।जंग में कार्यों को कैसे लिखें?
मेरे लिखें समारोह:
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)))
}
मैं कैसे करना चाहेंगे इसका इस्तेमाल करने की:
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 उस तरह नहीं है, कोई फर्क नहीं पड़ता कि मैं क्या करने की कोशिश, विशेषता सीमा संतुष्ट कभी नहीं कर रहे हैं। त्रुटि है:
➜ 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.
मुख्य लक्ष्य के रूप में, आप इस की तलाश में हो सकता है:: मैं इस उद्देश्य के लिए इस मैक्रो लिखा https://stackoverflow.com/q/36284637/1233251 –
मेरे मामले पर लागू नहीं होता। –