2013-05-02 4 views
6

tutorial on borrowed pointers (टूट) से, थोड़ा संशोधित:क्या मैं जंग में साझा विशेषता के लिए एक सूचक ले सकता हूं?

struct Point {x: float, y: float} 

fn compute(p1 : &Point) {} 

fn main() { 
    let shared_box : @Point = @Point {x: 5.0, y: 1.0}; 
    compute(shared_box); 
} 

और यह सब ठीक है, क्योंकि साझा बॉक्स स्वचालित रूप से समारोह के लिए उधार ली गई है।

लेकिन एक विशेषता के साथ एक ही कर रही है:

struct Point {x: float, y: float} 
trait TPoint {} 

impl TPoint for Point {} 

fn compute(p1 : &TPoint) {} 

fn main() { 
    let shared_box : @TPoint = @Point {x: 5.0, y: 1.0} as @TPoint; 

    compute(shared_box); 
    //  ^~~~~~~ The error is here 
} 

और यह विफल रहता है (संकलक संस्करण 0.6) कह रही:

error: mismatched types: expected &TPoint but found @TPoint (trait storage differs: expected & but found @)

इस संकलक में एक बग है? या उधारकर्ता पॉइंटर्स को लक्षणों के लिए अनुमति नहीं है?

यदि उत्तर बाद वाला है, तो वह क्यों है?

+0

मैं आपके द्वारा रिपोर्ट किए गए त्रुटि संदेश से थोड़ा आश्चर्यचकित हूं, क्योंकि आप कोड में @TPoint और TPoint के साथ काम कर रहे हैं, लेकिन त्रुटि संदेश ~ TPoint और TPoint के साथ समस्या की रिपोर्ट करता है। (मुझे एक ट्रांसक्रिप्शन त्रुटि पर संदेह है जिसे आप सही करना चाहते हैं।) – pnkfelix

+0

@pnkfelix: वास्तव में, सही किया गया। वही ~ ~ टीपीओटी' के साथ होता है लेकिन संदेश कोड के अनुरूप नहीं था। – rodrigo

उत्तर

3

इस जंग के वर्तमान संस्करण में एक ज्ञात बग है:

#3794: Casting to a trait doesn't auto-coerce to a &T type

वहाँ इस समस्या का समाधान करने की कोशिश कर के बारे में कुछ काम किया गया है, लेकिन कुछ तकनीकी जानकारी बाहर इस्त्री करने की आवश्यकता है कर रहे हैं; इच्छुक पार्टियां कुछ चर्चा देख सकती हैं (कुछ महीने पहले से) here on pull request 4178

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