मैं जंग में चर के प्रकार को कैसे प्रिंट करूं?


255

मेरे पास निम्नलिखित हैं:

let mut my_number = 32.90;

मैं किस प्रकार का प्रिंट कर सकता हूं my_number?

का उपयोग करना typeऔर type_ofकाम नहीं किया। क्या कोई और तरीका है जिससे मैं नंबर का प्रकार प्रिंट कर सकता हूं?

जवाबों:


185

यदि आप केवल एक चर के प्रकार का पता लगाना चाहते हैं और संकलन समय पर करने को तैयार हैं, तो आप एक त्रुटि का कारण बन सकते हैं और इसे लेने के लिए संकलक प्राप्त कर सकते हैं।

उदाहरण के लिए, चर को उस प्रकार पर सेट करें जो काम नहीं करता है :

let mut my_number: () = 32.90;
// let () = x; would work too
error[E0308]: mismatched types
 --> src/main.rs:2:29
  |
2 |     let mut my_number: () = 32.90;
  |                             ^^^^^ expected (), found floating-point number
  |
  = note: expected type `()`
             found type `{float}`

या अमान्य विधि को कॉल करें :

let mut my_number = 32.90;
my_number.what_is_this();
error[E0599]: no method named `what_is_this` found for type `{float}` in the current scope
 --> src/main.rs:3:15
  |
3 |     my_number.what_is_this();
  |               ^^^^^^^^^^^^

या किसी अमान्य फ़ील्ड तक पहुँचें :

let mut my_number = 32.90;
my_number.what_is_this
error[E0610]: `{float}` is a primitive type and therefore doesn't have fields
 --> src/main.rs:3:15
  |
3 |     my_number.what_is_this
  |               ^^^^^^^^^^^^

ये प्रकार को प्रकट करते हैं, जो इस मामले में वास्तव में पूरी तरह से हल नहीं हुआ है। इसे पहले उदाहरण में "फ्लोटिंग-पॉइंट वेरिएबल" कहा जाता है, और {float}तीनों उदाहरणों में " "; यह एक आंशिक रूप से हल किया गया प्रकार है जो आपके द्वारा उपयोग किए जाने पर निर्भर करता है f32या समाप्त हो सकता f64है। " {float}" एक कानूनी प्रकार का नाम नहीं है, यह एक प्लेसहोल्डर अर्थ है "मैं पूरी तरह से यकीन है कि यह क्या है" नहीं कर रहा हूँ, लेकिन यह है एक फ्लोटिंग प्वाइंट नंबर। फ़्लोटिंग-पॉइंट चर के मामले में, यदि आप इसे बाधित नहीं करते हैं, तो यह of के लिए डिफ़ॉल्ट होगा f64। (एक अयोग्य पूर्णांक शाब्दिक डिफ़ॉल्ट होगा i32।)

यह सभी देखें:


Iler कंपाइलर को चकरा देने के तरीके अभी भी हो सकते हैं ताकि यह f32और के बीच तय न हो सके f64; मुझे यकीन नहीं है। यह पहले जितना ही सरल हुआ करता था 32.90.eq(&32.90), लेकिन यह f64अब दोनों के साथ व्यवहार करता है और खुशी के साथ ठगता है, इसलिए मुझे नहीं पता।


4
:?अब काफी समय से मैन्युअल रूप से लागू किया जा रहा है। लेकिन इससे भी महत्वपूर्ण बात std::fmt::Debugयह है कि :?संख्या प्रकारों के लिए कार्यान्वयन (इसके लिए जो उपयोग करता है) अब इसमें यह बताने के लिए कोई प्रत्यय शामिल नहीं है कि यह किस प्रकार का है।
क्रिस मॉर्गन

4
मैं एक अभिव्यक्ति के प्रकार को खोजने की कोशिश करने के लिए इन तकनीकों का बहुत उपयोग करता हूं, लेकिन यह हमेशा काम नहीं करता है, खासकर जब टाइप पैरामीटर शामिल होते हैं। संकलक, उदाहरण के लिए, मुझे बताएं कि यह उम्मीद कर रहा है ImageBuffer<_, Vec<_>>जो मुझे बहुत मदद नहीं करता है जब मैं एक फ़ंक्शन लिखने की कोशिश कर रहा हूं जो इन चीजों में से एक पैरामीटर के रूप में लेता है। और यह कोड में होता है जो अन्यथा तब तक संकलित करता है जब तक मैं जोड़ नहीं देता :()। क्या कोई बेहतर तरीका नहीं है?
क्रिस्टोफर आर्मस्ट्रांग

2
यह थोड़ा दृढ़ और अचूक प्रतीत होता है। क्या यह कोड संपादक के लिए बहुत मुश्किल होगा जैसे कि एमएसीएस वह प्रकार प्रदान करता है जब कर्सर चर पर रहता है, जैसे कई अन्य भाषाओं में? यदि संकलक त्रुटि पर प्रकार बता सकता है, तो निश्चित रूप से यह पहले से ही पता होना चाहिए कि कोई त्रुटि नहीं है?
xji

1
@ जिआंग: रस्ट लैंग्वेज सर्वर यह जानकारी एक आईडीई को प्रदान करने के बारे में है, लेकिन यह अभी तक परिपक्व नहीं है - इसका पहला अल्फा रिलीज केवल कुछ दिनों पहले हुआ था। हां, यह एक एल्ड्रिच दृष्टिकोण है; हां, लक्ष्य हासिल करने के कम गूढ़ तरीके लगातार आ रहे हैं।
क्रिस मॉर्गन

2
यह एक हैक की तरह लगता है। क्या यह वास्तव में एक वैरिएबल के प्रकार की जांच करने का मुहावरेदार तरीका है?
भ्रमित

117

एक अस्थिर फ़ंक्शन है std::intrinsics::type_nameजो आपको एक प्रकार का नाम दे सकता है, हालांकि आपको रास्ट के एक रात के निर्माण का उपयोग करना होगा (यह स्थिर रस्ट में काम करने की संभावना नहीं है)। यहाँ एक उदाहरण है:

#![feature(core_intrinsics)]

fn print_type_of<T>(_: &T) {
    println!("{}", unsafe { std::intrinsics::type_name::<T>() });
}

fn main() {
    print_type_of(&32.90);          // prints "f64"
    print_type_of(&vec![1, 2, 4]);  // prints "std::vec::Vec<i32>"
    print_type_of(&"foo");          // prints "&str"
}

@vbo: जब तक यह स्थिर नहीं हो जाता। कुछ इस तरह से कुछ समय के लिए स्थिर होने की संभावना नहीं है, अगर कभी-कभी और यह मुझे आश्चर्यचकित नहीं करेगा अगर यह कभी भी स्थिर न हो; यह इस तरह की बात नहीं है कि आपको वास्तव में करना चाहिए।
क्रिस मॉर्गन

2
जंग-रात (1.3) पर यह केवल तब काम किया जब उस पहली पंक्ति को बदलकर#![feature(core_intrinsics)]
एटी

1
@DmitriNesteruk: print_type_ofसंदर्भ ले रहा है ( &T), मूल्य नहीं ( T), इसलिए आपको &&strइसके बजाय पास होना चाहिए &str; वह यह है कि print_type_of(&"foo")बजाय print_type_of("foo")
क्रिस मॉर्गन

12
std::any::type_nameजंग के बाद से स्थिर है। 1.38: stackoverflow.com/a/58119924
टिम रॉबिन्सन

2
संकलन / रनटाइम पर किसी चीज़ के प्रकार को प्राप्त करने के लिए मान्य उपयोग के मामले हैं। उदाहरण के लिए क्रमांकन के लिए - या केवल डीबगिंग उद्देश्यों के लिए। जो लोग लिखते हैं, "आपको कभी ऐसा काम नहीं करना चाहिए" बस उन उपयोग मामलों में खुद को अभी तक नहीं चलाया।
बिटकॉइलर

105

आप std::any::type_nameफ़ंक्शन का उपयोग कर सकते हैं । इसके लिए रात्रिकालीन संकलक या बाहरी टोकरा की आवश्यकता नहीं है, और परिणाम काफी सही हैं:

fn print_type_of<T>(_: &T) {
    println!("{}", std::any::type_name::<T>())
}

fn main() {
    let s = "Hello";
    let i = 42;

    print_type_of(&s); // &str
    print_type_of(&i); // i32
    print_type_of(&main); // playground::main
    print_type_of(&print_type_of::<i32>); // playground::print_type_of<i32>
    print_type_of(&{ || "Hi!" }); // playground::main::{{closure}}
}

सावधान रहें: जैसा कि प्रलेखन में कहा गया है, इस जानकारी का उपयोग केवल डीबग उद्देश्य के लिए किया जाना चाहिए:

यह नैदानिक ​​उपयोग के लिए अभिप्रेत है। स्ट्रिंग की सटीक सामग्री और प्रारूप निर्दिष्ट नहीं हैं, अन्य प्रकार के सर्वश्रेष्ठ-प्रयास विवरण होने के अलावा।

यदि आप चाहते हैं कि आपके प्रकार का प्रतिनिधित्व कंपाइलर संस्करणों के बीच समान रहे, तो आपको एक विशेषता का उपयोग करना चाहिए, जैसे कि फिकर के उत्तर में


3
मेरे लिए सबसे अच्छा जवाब, क्योंकि अधिकांश देवता इसे डीबगिंग उद्देश्यों के लिए उपयोग करना चाहते हैं, जैसे कि पार्सिंग विफलताओं को प्रिंट करना
केसर

वास्तव में मुझे क्या चाहिए, मुझे नहीं पता कि यह चिह्नित उत्तर क्यों नहीं है!
जेम्स पौलोज

4
@JamesPoulose क्योंकि यह फंक्शन हाल ही में हुआ है इसलिए मेरा जवाब नया है।
बोइथियोस

59

यदि आप पहले से सभी प्रकार जानते हैं, तो आप एक type_ofविधि जोड़ने के लिए लक्षणों का उपयोग कर सकते हैं :

trait TypeInfo {
    fn type_of(&self) -> &'static str;
}

impl TypeInfo for i32 {
    fn type_of(&self) -> &'static str {
        "i32"
    }
}

impl TypeInfo for i64 {
    fn type_of(&self) -> &'static str {
        "i64"
    }
}

//...

इंट्रिक्टिक्स या नथिन ', इसलिए हालांकि अधिक सीमित यह एकमात्र समाधान है यहां आपको एक स्ट्रिंग मिलती है और स्थिर है। ( फ्रेंच बोइथियोस का उत्तर देखें ) हालांकि, यह बहुत ही श्रमसाध्य है और इसमें प्रकार के मापदंडों का कोई हिसाब नहीं है, इसलिए हम कर सकते हैं ...

trait TypeInfo {
    fn type_name() -> String;
    fn type_of(&self) -> String;
}

macro_rules! impl_type_info {
    ($($name:ident$(<$($T:ident),+>)*),*) => {
        $(impl_type_info_single!($name$(<$($T),*>)*);)*
    };
}

macro_rules! mut_if {
    ($name:ident = $value:expr, $($any:expr)+) => (let mut $name = $value;);
    ($name:ident = $value:expr,) => (let $name = $value;);
}

macro_rules! impl_type_info_single {
    ($name:ident$(<$($T:ident),+>)*) => {
        impl$(<$($T: TypeInfo),*>)* TypeInfo for $name$(<$($T),*>)* {
            fn type_name() -> String {
                mut_if!(res = String::from(stringify!($name)), $($($T)*)*);
                $(
                    res.push('<');
                    $(
                        res.push_str(&$T::type_name());
                        res.push(',');
                    )*
                    res.pop();
                    res.push('>');
                )*
                res
            }
            fn type_of(&self) -> String {
                $name$(::<$($T),*>)*::type_name()
            }
        }
    }
}

impl<'a, T: TypeInfo + ?Sized> TypeInfo for &'a T {
    fn type_name() -> String {
        let mut res = String::from("&");
        res.push_str(&T::type_name());
        res
    }
    fn type_of(&self) -> String {
        <&T>::type_name()
    }
}

impl<'a, T: TypeInfo + ?Sized> TypeInfo for &'a mut T {
    fn type_name() -> String {
        let mut res = String::from("&mut ");
        res.push_str(&T::type_name());
        res
    }
    fn type_of(&self) -> String {
        <&mut T>::type_name()
    }
}

macro_rules! type_of {
    ($x:expr) => { (&$x).type_of() };
}

चलो इसका इस्तेमाल करते हैं:

impl_type_info!(i32, i64, f32, f64, str, String, Vec<T>, Result<T,S>)

fn main() {
    println!("{}", type_of!(1));
    println!("{}", type_of!(&1));
    println!("{}", type_of!(&&1));
    println!("{}", type_of!(&mut 1));
    println!("{}", type_of!(&&mut 1));
    println!("{}", type_of!(&mut &1));
    println!("{}", type_of!(1.0));
    println!("{}", type_of!("abc"));
    println!("{}", type_of!(&"abc"));
    println!("{}", type_of!(String::from("abc")));
    println!("{}", type_of!(vec![1,2,3]));

    println!("{}", <Result<String,i64>>::type_name());
    println!("{}", <&i32>::type_name());
    println!("{}", <&str>::type_name());
}

उत्पादन:

i32
&i32
&&i32
&mut i32
&&mut i32
&mut &i32
f64
&str
&&str
String
Vec<i32>
Result<String,i64>
&i32
&str

जंग का मैदान


इस उत्तर को दो अलग-अलग उत्तरों में विभाजित किया जा सकता है ताकि दोनों को मिलाया जा सके।
प्रज्वल धतवालिया

3
@PrajwalDhatwalia मैं आपके द्वारा कही गई बातों के बारे में सोच रहा हूं और मुझे लगता है कि मैं इस बात से संतुष्ट हूं कि संस्करण एक-दूसरे के पूरक कैसे हैं। विशेषता संस्करण एक सरलीकरण दर्शाता है कि हुड के नीचे मैक्रो संस्करण क्या कर रहा है, जिससे उसके लक्ष्य स्पष्ट हो जाते हैं। दूसरी ओर मैक्रो संस्करण, दिखाता है कि कैसे विशेषता संस्करण को अधिक सामान्यतः प्रयोग करने योग्य बनाया जा सकता है; यह ऐसा करने का एकमात्र तरीका नहीं है, लेकिन यह भी दिखाना कि यह संभव है लाभप्रद है। सारांश में, यह दो उत्तर हो सकते हैं लेकिन मुझे लगता है कि संपूर्ण इसके भागों के योग से अधिक है।
फिक्र

19

UPD निम्न कार्य नहीं करता है। सुधार के लिए शुभम के जवाब की जाँच करें ।

जांच करें std::intrinsics::get_tydesc<T>()। यह अभी "प्रायोगिक" स्थिति में है, लेकिन यह ठीक है यदि आप केवल टाइप सिस्टम के आसपास हैकिंग कर रहे हैं।

निम्नलिखित उदाहरण देखें:

fn print_type_of<T>(_: &T) -> () {
    let type_name =
        unsafe {
            (*std::intrinsics::get_tydesc::<T>()).name
        };
    println!("{}", type_name);
}

fn main() -> () {
    let mut my_number = 32.90;
    print_type_of(&my_number);       // prints "f64"
    print_type_of(&(vec!(1, 2, 4))); // prints "collections::vec::Vec<int>"
}

यह वही है जो प्रसिद्ध फॉर्मेटर को लागू करने के लिए आंतरिक रूप से उपयोग किया जाता है{:?}


15

** अद्यतन ** यह हाल ही में किसी भी समय काम करने के लिए सत्यापित नहीं किया गया है।

मैं एक साथ थोड़ा टोकरा यह करने के लिए vbo के जवाब के आधार पर डाल दिया। यह आपको मैक्रो को टाइप करने या वापस प्रिंट करने के लिए देता है।

इसे अपनी Cargo.toml फ़ाइल में रखें:

[dependencies]
t_bang = "0.1.2"

तो आप इसे इस तरह से उपयोग कर सकते हैं:

#[macro_use] extern crate t_bang;
use t_bang::*;

fn main() {
  let x = 5;
  let x_type = t!(x);
  println!("{:?}", x_type);  // prints out: "i32"
  pt!(x);                    // prints out: "i32"
  pt!(5);                    // prints out: "i32"
}

@vbo कहते हैं कि उनका समाधान अब काम नहीं करता है। क्या आपका काम करता है?
एंटनी हैचकिंस

काम नहीं कर रहा है `त्रुटि [E0554]: #![feature]स्थिर रिलीज चैनल पर इस्तेमाल नहीं किया जा सकता है`
मुहम्मद मौसा

7

आप चर का उपयोग करने के सरल दृष्टिकोण का भी उपयोग कर सकते हैं println!("{:?}", var)। यदि Debugप्रकार के लिए लागू नहीं किया गया है, तो आप संकलक के त्रुटि संदेश में प्रकार देख सकते हैं:

mod some {
    pub struct SomeType;
}

fn main() {
    let unknown_var = some::SomeType;
    println!("{:?}", unknown_var);
}

( प्लेपेन )

यह गंदा है लेकिन यह काम करता है।


8
यदि Debugइसे लागू नहीं किया गया है - हालांकि यह एक बहुत ही असंभव मामला है। सबसे पहली चीज जो आपको करनी चाहिए, वह है किसी भी स्ट्रक्चर को जोड़ना #[derive(Debug)]। मुझे लगता है कि समय जहाँ आप नहीं चाहते Debugहैं बहुत छोटे हैं।
शेमपस्टर

1
क्या आप बता सकते हैं कि क्या हो रहा है println!("{:?}", unknown_var);?? क्या यह एक स्ट्रिंग प्रक्षेप है लेकिन :?घुंघराले कोष्ठक के अंदर क्यों है ?
जूलियो मरीन्स

मैं त्रुटि भड़काने। संकलक को त्रुटि के साथ टाइप जानकारी प्रदान करने का विचार। मैंने उपयोग किया Debugक्योंकि यह लागू नहीं है, लेकिन आप भी उपयोग कर सकते हैं {}
डेनिसकोलडिन

4

वहाँ एक @ChrisMorgan है जवाब स्थिर जंग में अनुमानित प्रकार प्राप्त करने के लिए ( "फ्लोट") और वहाँ एक @ShubhamJain है इस सवाल का जवाब हर रात को जंग में अस्थिर समारोह के माध्यम से सटीक प्रकार ( "f64") प्राप्त करने के लिए।

अब यहाँ एक तरह से एक सटीक प्रकार (यानी f32 और f64 के बीच तय) स्थिर जंग में मिल सकता है:

fn main() {
    let a = 5.;
    let _: () = unsafe { std::mem::transmute(a) };
}

का परिणाम

error[E0512]: cannot transmute between types of different sizes, or dependently-sized types
 --> main.rs:3:27
  |
3 |     let _: () = unsafe { std::mem::transmute(a) };
  |                           ^^^^^^^^^^^^^^^^^^^
  |
  = note: source type: `f64` (64 bits)
  = note: target type: `()` (0 bits)

अपडेट करें

अशांत भिन्नता

fn main() {
    let a = 5.;
    unsafe { std::mem::transmute::<_, ()>(a) }
}

थोड़ा कम लेकिन कुछ कम पठनीय है।


यदि आप पहले से ही जानते हैं कि यह floatबता रहा है , f32और f64इसके साथ पूरा किया जा सकता हैstd::mem::size_of_val(&a)
एंटनी हैचकिंस

2

यदि आपका इंटरएक्टिव विकास के दौरान आपके वैरिएबल के प्रकार को जानना चाहते हैं, तो मैं आपके संपादक या विचारक के अंदर rls (जंग भाषा सर्वर) का उपयोग करने की अत्यधिक सलाह दूंगा । आप तब स्थायी रूप से होवर क्षमता को सक्षम या टॉगल कर सकते हैं और बस चर पर अपना कर्सर रख सकते हैं। थोड़ा संवाद टाइप सहित चर के बारे में जानकारी के साथ आना चाहिए।


1

कुछ अन्य जवाब काम नहीं करते हैं, लेकिन मुझे लगता है कि टाइपनेम टोकरा काम करता है।

  1. एक नया प्रोजेक्ट बनाएं:

    cargo new test_typename
    
  2. Cargo.toml को संशोधित करें

    [dependencies]
    typename = "0.1.1"
    
  3. अपने स्रोत कोड को संशोधित करें

    use typename::TypeName;
    
    fn main() {
        assert_eq!(String::type_name(), "std::string::String");
        assert_eq!(Vec::<i32>::type_name(), "std::vec::Vec<i32>");
        assert_eq!([0, 1, 2].type_name_of(), "[i32; 3]");
    
        let a = 65u8;
        let b = b'A';
        let c = 65;
        let d = 65i8;
        let e = 65i32;
        let f = 65u32;
    
        let arr = [1,2,3,4,5];
        let first = arr[0];
    
        println!("type of a 65u8  {} is {}", a, a.type_name_of());
        println!("type of b b'A'  {} is {}", b, b.type_name_of());
        println!("type of c 65    {} is {}", c, c.type_name_of());
        println!("type of d 65i8  {} is {}", d, d.type_name_of());
        println!("type of e 65i32 {} is {}", e, e.type_name_of());
        println!("type of f 65u32 {} is {}", f, f.type_name_of());
    
        println!("type of arr {:?} is {}", arr, arr.type_name_of());
        println!("type of first {} is {}", first, first.type_name_of());
    }
    

आउटपुट है:

type of a 65u8  65 is u8
type of b b'A'  65 is u8
type of c 65    65 is i32
type of d 65i8  65 is i8
type of e 65i32 65 is i32
type of f 65u32 65 is u32
type of arr [1, 2, 3, 4, 5] is [i32; 5]
type of first 1 is i32

मैंने आपके द्वारा वर्णित चरणों का पालन किया है। आज के रूप typenameमें, घोषणा में स्पष्ट प्रकार के बिना चर के साथ काम नहीं करता है। my_number इस सवाल के साथ इसे चलाने से निम्नलिखित त्रुटि मिलती है " type_name_ofअस्पष्ट संख्यात्मक प्रकार पर कॉल नहीं कर सकता {float}। मदद: आपको इस बंधन के लिए एक प्रकार निर्दिष्ट करना होगा, जैसे f32"
एंटनी हैचकिंस

मैं परीक्षण 0.65करता हूं और यह अच्छी तरह से काम करता है type of c 0.65 0.65 is f64:। यहाँ मेरा संस्करण है:rustc 1.38.0-nightly (69656fa4c 2019-07-13)
फ्लाई सिप

-2

आप उपयोग कर सकते हैं std::any::type_name। निम्नलिखित उन आदिम डेटा प्रकारों के उदाहरण हैं जो बिना उपयुक्त हैं &

use std::any::type_name;

fn type_of<T>(_: T) -> &'static str {
    type_name::<T>()
}

fn main() {
    let str1 = "Rust language";
    let str2 = str1;
    println!("str1 is:  {}, and the type is {}.", str1, type_of(str1));
    println!("str2 is: {}, and the type is {}.", str2, type_of(str2));
    let bool1 = true;
    let bool2 = bool1;
    println!("bool1 is {}, and the type is {}.", bool1, type_of(bool1));
    println!("bool2 is {}, and the type is {}.", bool2, type_of(bool2));
    let x1 = 5;
    let x2 = x1;
    println!("x1 is {}, and the type is {}.", x1, type_of(x1));
    println!("x2 is {}, and the type is {}.", x2, type_of(x2));
    let a1 = 'a';
    let a2 = a1;
    println!("a1 is {}, and the type is {}.", a1, type_of(a1));
    println!("a2 is {}, and the type is {}.", a2, type_of(a2));
    let tup1= ("hello", 5, 'c');
    let tup2 = tup1;
    println!("tup1 is {:?}, and the type is {}.", tup1, type_of(tup1));
    println!("tup2 is {:?}, and the type is {}.", tup2, type_of(tup2));
    let array1: [i32; 3] = [0; 3];
    let array2 = array1;
    println!("array1 is {:?}, and the type is {}.", array1, type_of(array1));
    println!("array2 is {:?}, and the type is {}.", array2, type_of(array2));
    let array: [i32; 5] = [0, 1, 2, 3, 4];
    let slice1 = &array[0..3];
    let slice2 = slice1;
    println!("slice1 is {:?}, and the type is {}.", slice1, type_of(slice1));
    println!("slice2 is {:?}, and the type is {}.", slice2, type_of(slice2));
}

आउटपुट है

str1 is:  Rust language, and the type is &str.
str2 is: Rust language, and the type is &str.
bool1 is true, and the type is bool.
bool2 is true, and the type is bool.
x1 is 5, and the type is i32.
x2 is 5, and the type is i32.
a1 is a, and the type is char.
a2 is a, and the type is char.
tup1 is ("hello", 5, 'c'), and the type is (&str, i32, char).
tup2 is ("hello", 5, 'c'), and the type is (&str, i32, char).
array1 is [0, 0, 0], and the type is [i32; 3].
array2 is [0, 0, 0], and the type is [i32; 3].
slice1 is [0, 1, 2], and the type is &[i32].
slice2 is [0, 1, 2], and the type is &[i32].


यह एक डुप्लिकेट उत्तर की तरह दिखता है, आपने पहले एक दूसरे को नहीं देखा होगा। आपकी सहायता के लिए धन्यवाद।
टॉड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.