2015-05-29 7 views
8

मैं स्वामित्व और उधार लेने की अवधारणा को समझने की कोशिश कर रहा हूं। सबसे पहले मैंने सोचा कि यह समझने के बाद यह बहुत आसान था। लेकिन ...बुलियन कॉपी करने योग्य क्यों हैं भले ही प्रलेखन इंगित नहीं करता है?

fn main() { 
    let a = 5; 

    let _y = double(a); 
    println!("{}", a); 
} 

fn double(x: i32) -> i32 { 
    x * 2 
} 

पहले तो मुझे यह संकलन नहीं करने के लिए अपेक्षा की होगी, क्योंकि a हैं _y ले जाया गया है।

मैं थोड़ा उलझन में था, लेकिन I found out कि मैं सही था कि i32 नियम के अपवाद है क्योंकि यह प्रतिलिपि विशेषता लागू करता है।

मैंने the Copy trait पर देखा और जैसा कि मैं इसे समझता हूं, वे नीचे दिए गए इस गुण को लागू करने वाले सभी प्रकारों को सूचीबद्ध करते हैं।

तो bool प्रकार मौजूद नहीं है और इसलिए मुझे लगता है कि इसका डिफ़ॉल्ट व्यवहार "स्थानांतरित" होना था। लेकिन ...

fn main() { 
    let a = true; 

    let _y = change_truth(a); 
    println!("{}", a); 
} 

fn change_truth(x: bool) -> bool { 
    !x 
} 

या तो विफल नहीं होता है।

अब मैं काफी उलझन में हूं। मुझे Clone trait मिला जो कि कॉपी विशेषता से निकटता से संबंधित प्रतीत होता है। लेकिन जब तक कि मैं इसे याद नहीं करता, वे वास्तव में सीखने के दस्तावेज़ में इसका जिक्र नहीं करते हैं।

क्या कोई मुझे कुछ और जानकारी दे सकता है?

अद्यतन:

  1. मैं एक issue on the Rust repository दर्ज किया है।
  2. मैंने कुछ परिवर्तन प्रस्तावों के साथ pull request भी बनाया है।

उत्तर

8

आपकी समझ बहुत अच्छी है, यह दस्तावेज़ों के साथ एक मुद्दा प्रतीत होता है। प्रलेखन Copy किसी भी प्राइमेटिव प्रकारों के लिए Copy उदाहरण नहीं दिखाता है, भले ही वे निश्चित रूप से Copy हैं। कि संकलक समझता है boolCopy होने के लिए दिखाने के लिए उदाहरण के लिए, निम्नलिखित ठीक संकलित:

fn takes_copyable<T: Copy>(foo: T) {} 

fn main() { 
    takes_copyable(true); 
} 
+0

ओह धन्यवाद! तो मैं इसे सही ढंग से समझता हूं, यह एक राहत है! क्या सभी आदिम प्रकार कॉपी गुण लागू करते हैं? यह दस्तावेज़ों में निश्चित रूप से उल्लेख किया जाना चाहिए क्योंकि यह भाषा में सबसे महत्वपूर्ण नियम के लिए एक महत्वपूर्ण अपवाद है। यदि आपने पहले से ऐसा नहीं किया है, तो मैं उन्हें जानने के लिए गिथब पर एक मुद्दा बनाउंगा :) –

+1

हां, मेरा मानना ​​है कि आदिम प्रकारों को सभी 'कॉपी' लागू करना चाहिए। और यह निश्चित रूप से एक मुद्दा दर्ज करने लायक है, तो आगे बढ़ें। – fjh

+1

ग्रेट आपके समय के लिए धन्यवाद :) समस्या बनाई गई है: https://github.com/rust-lang/rust/issues/25893 –

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