2010-01-23 23 views
15

स्काला में, क्या"विशेषता ए <: बी" का अर्थ क्या है?

trait A <: B 

क्या मतलब है? क्या यह

trait A extends B 

जैसा ही है?

जोड़ने के लिए संपादित: मैं टाइप पैरामीटर के लिए वाक्यविन्यास से परिचित हूं, और <: का अर्थ उस संदर्भ में है। हालांकि, उपर्युक्त उदाहरण में मुझे लगता है कि A एक प्रकार पैरामीटर नहीं घोषित किया जा रहा विशेषता का नाम है।

+28

मुझे लगता है कि इसका मतलब है कि बी –

+1

FWIW पर मुस्कुरा रहा है, 2.7.5 का मेरा इंस्टॉल इसकी अनुमति नहीं देता है। –

+0

मैं 2.8 स्नैपशॉट (2.8.0.r20331-b20100101020206) का उपयोग कर रहा हूं –

उत्तर

17

एक ही बात करने के लिए संकलित करने के लिए लगता है: भाषा कल्पना ऐसा लगता है कि <: और extends ही कर रहे हैं, विशेष रूप से यह परिभाषित किया गया है के रूप में में देख रहे हैं।

~/code/scratch: scala -Xprint:typer -e 'trait B; trait A <: B' 
      // snip 
      abstract trait B extends scala.AnyRef; 
      abstract trait A extends java.lang.Object with this.B 

~/code/scratch: scala -Xprint:typer -e 'trait B; trait A extends B' 
      // snip 
      abstract trait B extends scala.AnyRef; 
      abstract trait A extends java.lang.Object with this.B  

spec "5.3.3 लक्षण" में इसकी व्याख्या नहीं करता है। लेकिन सिंटेक्स सारांश इसका जिक्र करता है।

TraitDef ::= id [TypeParamClause] TraitTemplateOpt 
TraitTemplateOpt ::= Extends TraitTemplate | [[Extends] TemplateBody] 
Extends ::= ‘extends’ | ‘<:’ 

अद्यतन यह r14632 में पेश किया गया था। कंपाइलर विकल्प -Xexperimental के साथ यह प्रस्तावित भाषा सुविधा Virtual Traits के साथ उपयोग के लिए, सार के रूप में विशेषता को चिह्नित करता है। -Xexperimental के बिना, यह 'विस्तार' के लिए समानार्थी है जिसे केवल लक्षणों के लिए अनुमति है।

+5

आपके द्वारा देखे जाने वाले स्पेस का कौन सा हिस्सा निर्भर करता है! सिंटैक्स सारांश परिशिष्ट कहते हैं, "विस्तार :: = 'विस्तार' | '<:'" –

+0

मैंने spec पर एक बग उठाया: https://lampsvn.epfl.ch/trac/scala/ticket/2953 – retronym

+0

यह भी देखें http : //lampsvn.epfl.ch/trac/scala/export/20327/scala/branches/devel-base-2.8.0/SIP/virtual-traits/sip-0000X.xhtml –

3

हाँ, ठीक है, लगभग, को थोड़ा और जानकारी के लिए देखें। language spec से, हम निम्नलिखित परिभाषा देखते हैं:

हम प्रकारों के बीच दो संबंध परिभाषित करते हैं।

टाइप समकक्ष टी ≡ यू टी और यू सभी संदर्भों में अंतर-परिवर्तनीय हैं।

अनुरूपता टी <: यू टाइप टी यू टाइप करने के लिए अनुरूप है।

संपादित:

ClassTemplateOpt ::= Extends ClassTemplate | [[Extends] TemplateBody] 
TraitTemplateOpt ::= Extends TraitTemplate | [[Extends] TemplateBody] 
Extends ::= ‘extends’ | ‘<:’ 
3

Scala Language Specification पर देखकर, ऐसा लगता है कि यह वही बात है। विशेषता के लिए विवरण केवल trait A extends B वाक्यविन्यास का उल्लेख करता है। लेकिन स्काला वाक्य रचना सारांश विशेषता परिभाषा के लिए दूसरे के स्थान पर extends और <: उपयोग करता है:

TraitTemplateOpt ::= Extends TraitTemplate | [[Extends] TemplateBody] 
Extends ::= ‘extends’ | ‘<:’ 
11

<: वाक्य रचना आभासी कक्षाओं (जो अभी तक लागू नहीं कर रहे हैं) में भविष्य में उपयोग के लिए आरक्षित है।

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