जंगली आदिम प्रकारों में हेरफेर करने की बात आती है तो जंग कुछ अन्य भाषाओं की तुलना में कठोर है। अधिकांश गणित ऑपरेटरों को दोनों तरफ एक ही प्रकार की आवश्यकता होती है (बिट शिफ्ट के अपवाद के साथ, जो usize
दाएं हाथ के ऑपरेंड के रूप में अपेक्षा करता है)। जंग स्वचालित रूप से एक आदिम संख्यात्मक प्रकार से दूसरे मानों को नहीं डालेगा: आपको कोड में एक स्पष्ट कलाकार डालना होगा। इस कोड को स्थिति को दर्शाता है:
fn main(){
let a: i32 = 2;
let b: i8 = 3;
println!("{}", a + b);
}
यह निम्न त्रुटियों के साथ संकलित करने के लिए विफल रहता है:
<anon>:4:24: 4:25 error: mismatched types:
expected `i32`,
found `i8`
(expected i32,
found i8) [E0308]
<anon>:4 println!("{}", a + b);
^
<std macros>:2:25: 2:56 note: in this expansion of format_args!
<std macros>:3:1: 3:54 note: in this expansion of print! (defined in <std macros>)
<anon>:4:5: 4:27 note: in this expansion of println! (defined in <std macros>)
<anon>:4:24: 4:25 help: see the detailed explanation for E0308
<anon>:4:20: 4:25 error: the trait `core::ops::Add<i8>` is not implemented for the type `i32` [E0277]
<anon>:4 println!("{}", a + b);
^~~~~
<std macros>:2:25: 2:56 note: in this expansion of format_args!
<std macros>:3:1: 3:54 note: in this expansion of print! (defined in <std macros>)
<anon>:4:5: 4:27 note: in this expansion of println! (defined in <std macros>)
<anon>:4:20: 4:25 help: see the detailed explanation for E0277
आपका स्थिति समान है, लेकिन यह ख़ासियत है कि आप पूर्णांकों और तैरता मिश्रण कर रहे हैं। जंग में, पूर्णांक और फ्लोट अक्षर को संदर्भ के आधार पर एक प्रकार असाइन किया जाता है। यही कारण है कि मैं a
से 2
और b
से 3
ऊपर सेट कर सकता हूं: 2
हमेशा i32
नहीं है, लेकिन संदर्भ के लिए इसे i32
के रूप में स्पष्ट रूप से टाइप किया गया है।
अपने मामले में, आप f32
से एक पूर्णांक घटाने का प्रयास कर रहे हैं। त्रुटि संदेश Sub<_>
का उल्लेख करता है; _
4
के प्रकार का प्रतिनिधित्व करता है कि संकलक यह पता लगाने में सक्षम नहीं था।
use std::io::*;
fn main(){
let reader = stdin();
let nums = reader.lock()
.lines().next().unwrap().unwrap()
.split_whitespace()
.map(|s| s.parse::<i32>().unwrap())
.map(|s| s as f32)
.map(|s| (s - 4.0)/2.0)
.map(|s| s as i32)
.collect::<Vec<_>>();
}
:
समाधान पूर्णांक शाब्दिक बजाय नाव शाब्दिक उपयोग करने के लिए बस है
स्रोत
2016-01-21 01:49:18