2015-06-07 9 views
14

को लागू करने the docs के अनुसार के लिए कोई त्रुटि, जंग अगर मैं इस तरह दो अलग-अलग लक्षण द्वारा प्रदान की एक विधि कॉल करने की कोशिश शिकायत करनी चाहिए।दो लक्षण एक ही विधि

हालांकि मैं इसके लिए कोई त्रुटि मिलती है:

extern crate mio; 
use mio::buf::RingBuf; 
use mio::buf::Buf; 
use std::io::Read; 

fn main() { 
    let buf = RingBuf::new(10); 
    let bytes = buf.bytes(); 
    println!("{:?}", bytes); 
} 

mio::buf::RingBuf लागू करता Buf और Read दोनों। दोनों लक्षण bytes विधि प्रदान करते हैं।

मैं उम्मीद करता हूं कि जंग को उपरोक्त त्रुटि के साथ शिकायत करने की उम्मीद होगी। इसके बजाय यह चुपचाप "गलत" कार्यान्वयन चुनता है और बाद में println गलत प्रकार के बारे में शिकायत करता है।

कोई विचार क्यों मुझे यहां कोई त्रुटि नहीं मिली है?

यदि मैं use std::io::Read; हटा देता हूं तो सब ठीक काम करता है। लेकिन उस विशेषता के साथ अचानक पढ़ने के कार्यान्वयन का उपयोग किया जाता है और बाइट्स में "गलत" प्रकार होता है।

(मैं जंग 1.0.0 का उपयोग कर रहा)

+2

कृपया इसे [जंग के मुद्दे ट्रैकर] पर रिपोर्ट करें (https://github.com/rust-lang/rfcs/issues) – bluss

+0

मैंने पहले से ही किया है: https://github.com/rust-lang/rust/issues/ 26080 - सुनिश्चित नहीं है कि यह सही जगह है या नहीं। – michas

+0

धन्यवाद, मुझे लगता है कि यह जगह – bluss

उत्तर

6

@bluss समस्या दिखाई दी: दोनों प्रकार के एक अलग self प्रकार का उपयोग करते

struct Type; 

trait A { 
    fn foo(&self) -> bool { false } 
} 

trait B : Sized { 
    fn foo(self) -> bool { true } 
} 

impl A for Type { } 
impl B for Type { } 

fn main() { 
    println!("{}", Type.foo()); // This will call B::foo -- it will prefer `self`. 
} 

, जंग उन्हें के रूप में विभिन्न व्यवहार करता है और बस विधि बुला उनमें से एक पसंद करते हैं।

यह शायद जंग में एक बग है। विवरण के लिए संबंधित Rust issue पर एक नज़र डालें।

+0

है, मुझे बस इतना लगा कि यह इस तरह काम करता था, और अब मुझे नहीं लगता कि हम इसे एक बग कह सकते हैं। जंग स्थिर है इसलिए हमें इस सुविधा के साथ दोस्ताना होना चाहिए। : - | – bluss

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