2015-01-19 13 views
18

क्या enum मूल्यों को प्रारूपित और प्रिंट करने का कोई आसान तरीका है? मुझे उम्मीद थी कि उनके पास std::fmt::Display का डिफ़ॉल्ट कार्यान्वयन होगा, लेकिन ऐसा लगता है कि यह मामला नहीं है।क्या एनम वैल्यू प्रिंट करने का कोई तरीका है?

enum Suit { 
    Heart, 
    Diamond, 
    Spade, 
    Club 
} 

fn main() { 
    let s: Suit = Suit::Heart; 
    println!("{}", s); 
} 

वांछित उत्पादन: Heart

त्रुटि:

error[E0277]: the trait bound `Suit: std::fmt::Display` is not satisfied 
    --> src/main.rs:10:20 
    | 
10 |  println!("{}", s); 
    |     ^the trait `std::fmt::Display` is not implemented for `Suit` 
    | 
    = note: `Suit` cannot be formatted with the default formatter; try using `:?` instead if you are using a format string 
    = note: required by `std::fmt::Display::fmt` 
+0

जंग में एक डिफ़ॉल्ट कार्यान्वयन के रूप में ऐसी कोई चीज नहीं है। –

उत्तर

22

आप std::format::Debug के एक कार्यान्वयन प्राप्त कर सकते हैं:

#[derive(Debug)] 
enum Suit { 
    Heart, 
    Diamond, 
    Spade, 
    Club 
} 

fn main() { 
    let s = Suit::Heart; 
    println!("{:?}", s); 
} 

यह Display क्योंकि Display प्राप्त करने के लिए संभव नहीं है के उद्देश्य से है मनुष्यों को प्रदर्शित करने पर और संकलक स्वचालित रूप से तय नहीं कर सकता कि उस मामले के लिए उपयुक्त शैली क्या है। Debug प्रोग्रामर के लिए है, इसलिए एक आंतरिक-खुला दृश्य स्वचालित रूप से जेनरेट किया जा सकता है।

7

Debug विशेषता Enum संस्करण के नाम से प्रिंट प्रिंट करती है।

आप उत्पादन प्रारूप में तैयार करना है, तो आप Display अपने Enum के लिए बहुत की तरह लागू कर सकते हैं:

use std::fmt; 

enum Suit { 
    Heart, 
    Diamond, 
    Spade, 
    Club 
} 

impl fmt::Display for Suit { 
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { 
     match *self { 
      Suit::Heart => write!(f, "♥"), 
      Suit::Diamond => write!(f, "♦"), 
      Suit::Spade => write!(f, "♠"), 
      Suit::Club => write!(f, "♣"), 
     } 
    } 
} 

fn main() { 
    let s = Suit::Heart; 
    println!("{}", s); 
} 
संबंधित मुद्दे