मेरे पास जंग में जेनिक्स के बारे में एक नया सवाल है (संस्करण 1.0)।एक सामान्य प्रकार कास्टिंग
मान लें कि मैं विभाजन करने के लिए एक सामान्य कार्य लिखता हूं। ऐसे फ़ंक्शन की उपयोगिता को कभी भी ध्यान न दें; यह सवाल सरल रखने के लिए यह एक आसान काम है।
fn divide<T: std::ops::Div>(a: T, b: T) -> T {
a/b
}
fn main() {
println!("{}", divide(42, 18))
}
यह प्रोग्राम संकलित करने में विफल रहता है।
src/main.rs:2:5: 2:10 error: mismatched types:
expected `T`,
found `<T as core::ops::Div>::Output`
(expected type parameter,
found associated type) [E0308]
src/main.rs:2 a/b
^~~~~
मैं समझता हूँ कि संकलक त्रुटि कह रहा है कि विभाजन आपरेशन के परिणाम टाइप Output
, नहीं T
है, और मैं standard library documentation में Output
प्रकार देखते हैं।
मैं Output
से T
से कैसे परिवर्तित करूं? मैं कास्ट करने के लिए as
का उपयोग करने का प्रयास करता हूं।
fn divide<T: std::ops::Div>(a: T, b: T) -> T {
(a/b) as T
}
fn main() {
println!("{}", divide(42, 18))
}
यह एक अलग संकलक त्रुटि का कारण बनता है।
src/main.rs:2:5: 2:17 error: non-scalar cast: `<T as core::ops::Div>::Output` as `T`
src/main.rs:2 (a/b) as T
^~~~~~~~~~~~
मैं विचारों यह काम करने के लिए से बाहर हूँ, और मुझे लगता है मैं यहाँ कुछ भाषा के बारे में बुनियादी की समझ की कमी है, लेकिन मैं भी इस काम करने के लिए देखने के लिए क्या पता नहीं है। मदद? तुम क्यों समारोह
अंदर डाली नहीं कर सकते जब आप में हैं के बारे में अधिक विवरण जोड़ने के लिए
fn divide<T: std::ops::Div>(a: T, b: T) -> T::Output {
a/b
}
संपादित करें:
शायद http://stackoverflow.com/q/29184358/155423 का डुप्लिकेट। – Shepmaster