2015-05-15 6 views
18

गो सीधे structs और सरणी मुद्रित करने में सक्षम प्रतीत होता है।structs और arrays मुद्रित करने के लिए कैसे?

struct MyStruct { 
    a: i32, 
    b: i32 
} 

और

let arr: [i32; 10] = [1; 10]; 
+6

जंग के मुकाबले एक अलग दर्शन है: जहां गो "बैटरी शामिल है", जंग "जो आप उपयोग नहीं करते हैं उसके लिए भुगतान न करें"। इस प्रकार, यदि आप 'MyStruct' मुद्रित करना चाहते हैं, तो आपको संकलक को प्रिंट करने के लिए कोड शामिल करना होगा (या इसे स्वयं कोड करें)। –

उत्तर

25

आप अपने struct पर Debug विशेषता लागू करना चाहते हैं। #[derive(Debug)] का उपयोग करना सबसे आसान समाधान है। तो फिर तुम {:?} साथ इसे प्रिंट कर सकते हैं:

#[derive(Debug)] 
struct MyStruct{ 
    a: i32, 
    b: i32 
} 

fn main() { 
    let x = MyStruct{ a: 10, b: 20 }; 
    println!("{:?}", x); 
} 
+0

क्या हम सरणी के लिए डीबग विशेषता का उपयोग कर सकते हैं? – tez

+0

@tez 'डीबग' विशेषता [पहले से ही कई प्रकार के लिए लागू की गई है] (http://doc.rust-lang.org/std/fmt/trait.Debug.html), जिसमें 0 से 32 आइटमों के सरणी भी शामिल हैं, साथ ही साथ किसी भी लंबाई के स्लाइस और 'वेक' के रूप में। महत्वपूर्ण बात यह है कि कंटेनर * के अंदर आइटम * को डीबग 'भी लागू करना होगा। – Shepmaster

5

mdup says रूप में, आप Debug उपयोग कर सकते हैं, लेकिन आप भी Display विशेषता का उपयोग कर सकते हैं। ,

Used Display: (value a: 0, value b: 0) 

अधिक जानकारी के लिए आप fmt module documentation देख सकते हैं:

struct MyStruct { 
    a: i32, 
    b: i32 
} 

impl std::fmt::Display for MyStruct { 
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { 
     write!(f, "(value a: {}, value b: {})", self.a, self.b) 
    } 
} 

fn main() { 
    let test = MyStruct { a: 0, b: 0 }; 

    println!("Used Display: {}", test);  
} 

शेल: आप एक कस्टम उत्पादन बना सकते हैं।

1

कोई भी यहाँ स्पष्ट रूप से सरणियों के लिए जवाब देता है, एक सरणी आप {:?} निर्दिष्ट करने की आवश्यकता बाहर मुद्रित करने के लिए के रूप में, यह भी डिबग आउटपुट मुद्रित करने के लिए

let val = 3; 
let length = 32; // the maximum that can be printed without error 
let array1d = [val; length]; 
let array2d = [array1d; length]; // or [[3; 32]; 32]; 
let array3d = [array2d; length]; // or [[[3; 32]; 32]; 32]; 

इस्तेमाल किया हालांकि सरणियों जहां length > 32 एक त्रुटि के साथ बाहर निकल जाएगा:

let length = 33; 
let array1d = [3; length]; 
println("{:?}", array1d); 
error[E0277]: the trait bound `[{integer}; 33]: std::fmt::Debug` is not satisfied 
--> src\main.rs:6:22 
| 
|  println!("{:?}", array1d); 
|      ^^^^^^^ the trait `std::fmt::Debug` is not implemented for `[{integer}; 33]` 

अब सरणियों इस जवाब से दृष्टिकोण के साथ बाहर मुद्रित किया जा सकता: Implement Debug trait for large array type

0

दरअसल बस {:?} पर्याप्त है।

let a = [1, 2, 3, 4, 5]; 
let complete = &a[..]; 
println! ("{:?}", a); 
println! ("{:?}", complete); 
संबंधित मुद्दे