2017-08-25 15 views
7

जंग ने पैटर्न में फ्लोट अक्षर को अस्वीकार करने का निर्णय लिया है: Matching on floating-point literal values is totally allowed and shouldn't be #41255। यह वर्तमान में एक चेतावनी है लेकिन भविष्य की रिलीज में एक कठिन त्रुटि होगी।फ़्लोटिंग पॉइंट्स से मिलान करने के विकल्प

मेरा प्रश्न है, मैं निम्नलिखित कोड ?:

struct Point { 
    x: f64, 
    y: f64, 
} 

let point = Point {x: 5.0, y: 4.0}; 

match point { 
    Point {x: 5.0 , y} => println!("y is {} when x is 5", y), // Causes warning 
    _ => println!("x is not 5") 
} 

यह अब असंभव है के साथ उदाहरण के लिए बराबर कैसे प्राप्त करते हैं तो क्या है? क्या मुझे पैटर्न बदलने के बारे में सोचने की ज़रूरत है? क्या इसका मिलान करने का कोई और तरीका है?

उत्तर

13

आप एक मैच गार्ड का उपयोग कर सकते हैं:

match point { 
    Point { x, y } if x == 5.0 => println!("y is {} when x is 5", y), 
    _ => println!("x is not 5"), 
} 

यह आपको करने के लिए पीठ पर जिम्मेदारी डालता है, तो यह चेतावनी किसी भी प्रकार का उत्पादन नहीं करता है।

Floating point equality is an interesting subject though ... इसलिए मैं सलाह दूंगा कि आप इसमें आगे बढ़ें क्योंकि यह बग का स्रोत हो सकता है (जो मुझे लगता है कि जंग कोर टीम फ्लोटिंग पॉइंट मानों के खिलाफ मेल नहीं खाती है)।

संबंधित मुद्दे