Cairo में टाइप कन्वर्ज़न की मदद से आप डेटा को एक टाइप से दूसरे टाइप में बदल सकते हैं, जिससे डेटा को लचीले और सुरक्षित ढंग से संभालना संभव हो जाता है।
Cairo में टाइप कन्वर्ज़न के लिए कई तरीके मौजूद हैं:
जो संख्यात्मक टाइप आपस में मेल खाते हैं, उनके लिए आप सीधा कास्टिंग इस्तेमाल कर सकते हैं:
let small_number: u8 = 42;
let big_number: u32 = small_number.into();
Into ट्रैट एक टाइप से दूसरे टाइप में बदलने की सुविधा देता है:
let value: u16 = 100;
let converted: u32 = value.into();
जो कन्वर्ज़न असफल भी हो सकते हैं, उनके लिए TryInto इस्तेमाल कीजिए, जो एक Option लौटाता है:
let large_value: u32 = 70000;
let small_value: Option<u16> = large_value.try_into();
match small_value {
Option::Some(v) => println!("Converted: {}", v),
Option::None => println!("Conversion failed"),
}
आप अपने खुद के टाइपों के लिए Into लागू कर सकते हैं:
#[derive(Drop)]
struct Celsius {
value: i32,
}
#[derive(Drop)]
struct Fahrenheit {
value: i32,
}
impl CelsiusIntoFahrenheit of Into<Celsius, Fahrenheit> {
fn into(self: Celsius) -> Fahrenheit {
Fahrenheit { value: (self.value * 9) / 5 + 32 }
}
}
TryInto इस्तेमाल कीजिएInto इस्तेमाल कीजिएTryInto से मिलने वाले Option::None वाले मामलों को हमेशा संभालिएAstrid एक साहसी कीमियागर है, और वह अलग-अलग दुनियाओं से जुटाई गई जादुई माप की इकाइयों को मानकीकृत करने की कोशिश कर रही है। कुछ दुनियाओं में चिह्नित माप मिलते हैं, जो ऋणात्मक भी हो सकते हैं, और कुछ में अचिह्नित, जो हमेशा धनात्मक होते हैं। इसके अलावा, Astrid के पास कुछ दुर्लभ सामग्रियों के लिए दो कस्टम टाइप हैं, और उसे इन टाइपों के बीच आसानी से रूपांतरण करने का तरीका चाहिए।
आपको Astrid की मदद करनी है ताकि वह चिह्नित और अचिह्नित पूर्णांकों के बीच रूपांतरण कर सके, और Cairo के Into तथा TryInto ट्रेट की मदद से अपनी खास सामग्री के टाइपों के लिए कस्टम टाइप रूपांतरण बना सके।
Astrid के पास कुछ माप ऐसे भी आते हैं जो धनात्मक या ऋणात्मक वैल्यू में होते हैं (चिह्नित पूर्णांक), लेकिन कुछ कामों के लिए उसे यह पक्का करना होता है कि वैल्यू हमेशा धनात्मक रहे (अचिह्नित पूर्णांक)।
एक फंक्शन लिखकर Astrid की मदद कीजिए जो यह रूपांतरण करता है:
i32) को अचिह्नित पूर्णांक (u16) में।u16) को चिह्नित पूर्णांक (i32) में।let signed_value: i32 = -42;
match convert_signed_to_unsigned(signed_value) {
Option::Some(v) => println!("Converted to unsigned: {}", v),
Option::None => println!("Failed to convert: {}", signed_value),
} // prints "Failed to convert: -42"
let unsigned_value: u16 = 42;
let signed_value: i32 = convert_unsigned_to_signed(unsigned_value);
println!("Converted to signed: {}", signed_value); // prints "Converted to signed: 42"
Astrid दो दुर्लभ सामग्रियों, Essence और Elixir, के साथ काम करती है, जिन्हें कस्टम टाइप से दर्शाया जाता है। वह Essence को Elixir में बदल पाना चाहती है, लेकिन उल्टा नहीं।
दो कस्टम टाइप, Essence और Elixir, बनाकर और Essence से Elixir में बदलने के लिए Into ट्रेट लागू करके Astrid की मदद कीजिए।
एक फंक्शन लिखिए जो एक Essence लेता है और .into() की मदद से उसे Elixir में बदल देता है।
#[derive(Drop)]
struct Essence {
potency: u16,
}
#[derive(Drop)]
struct Elixir {
strength: u16,
}
fn convert_essence_to_elixir(essence: Essence) -> Elixir {
// Convert the Essence to Elixir using the Into trait.
essence.into()
}
fn main() {
let essence = Essence { potency: 100 };
let elixir: Elixir = convert_essence_to_elixir(essence);
println!("Elixir strength: {}", elixir.strength); // Elixir strength: 100
}
Exercism पर साइन अप कीजिए और Cairo को 25 कॉन्सेप्ट68 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।