2012-09-16 17 views
8

स्केल पृष्ठ 436 में प्रोग्रामिंग को ट्रैक करने के लिए "सकारात्मक" और "ऋणात्मक" पदों को ट्रैक रखते हुए, लेखक संकलक जांच का एक उदाहरण देता है कि प्रत्येक प्रकार पैरामीटर केवल उन पदों में उपयोग किया जाता है जिन्हें उचित रूप से वर्गीकृत किया जाता है ।भिन्नता एनोटेशन, स्कैला कंपाइलर

abstract class Cat[-T, +U] { 
    def meow[W^-](volume: T^-, listener: Cat[U^+, T^-]^-) : Cat[Cat[U^+, T^-]^-, U^+]^+ 
} 

उदाहरण कैसे काम करता है? डब्ल्यू और पहले टी को नकारात्मक संकेत क्यों मिलता है? एल्गोरिदम वास्तव में कैसे काम करता है?

उत्तर

1

http://www.artima.com/pins1ed/type-parameterization.html

1 एड में 19.4।

"विधि मान पैरामीटर पदों को विधि के बाहर स्थितियों के सापेक्ष फ़्लिप वर्गीकरण में वर्गीकृत किया जाता है।"

"विधि मान पैरामीटर पदों के अलावा, मौजूदा वर्गीकरण विधियों के प्रकार पैरामीटर पर भी फ़्लिप किया गया है।"

इस मामले में फ़्लिप का मतलब है "सकारात्मक से फ़्लिप", इसलिए नकारात्मक।

बोनस अंक के लिए, इस मॉडल की भौतिक व्याख्या को दर्शाते हुए एक LOLCats उत्पन्न करें।

अतिरिक्त क्यू & एक:

Okay let's look at the 3rd value parameter "listener". 

It has a annotation of: Cat[U^+, T^-]^-. 

Why does U have +? Why does T have -? Why does the whole thing have a -? 

विधि परम एक contravariant स्थिति है, इसलिए सबसे बाहरी (सबसे दाएं) शून्य है।

बिल्ली के लिए प्रकार पैराम [-T, + U] हैं, इसलिए इस फ़्लिप स्थिति में, [+, -]। (वास्तविक पैरा लागू किए जा रहे हैं, [यू, टी], प्रासंगिक नहीं हैं।) यह जांचता है क्योंकि वास्तविक पैरा क्रमशः सह-और अनुबंध-भिन्न होते हैं।

अधिक सवाल:

Could you kindly describe on SO why the return value type has the following annotation 
for the sake of completeness... 

Also could you be so kind as to give an example of the following rule? 

A classification is sometimes flipped at the type argument position of a type... 

यह दूसरा अतिरिक्त प्रश्न अपने पिछले पहले अतिरिक्त प्रश्न के समान है। दो बिल्ली [+, -] फ़्लिपिंग का वर्णन करते हैं, और परिणाम प्रकार बिल्ली [-, +] फ़्लिपिंग नहीं दिखाती है।

यह धागा पैरामीटर (बातें आप में पारित) और परिणामों की विचरण के लिए आगे प्रेरणा प्रदान करता है (चीजें आप बाहर निकलना):

https://groups.google.com/forum/#!topic/scala-user/ViwLKfvo3ec

मैंने पाया जावा चर्चा और उदाहरण (पी ई सी एस या Naftalin और वाद्लेर) स्काला प्रदान करता है के लिए उपयोगी पृष्ठभूमि।

+0

परिणाम प्रकार बिल्ली कैट [-, +] + सकारात्मक सकारात्मक एनोटेशन क्यों है? – platypus

+0

मैंने आपका अंतिम उत्तर पढ़ा। मुझे नहीं लगता कि पाठ "प्रोग्रामिंग इन स्कैला" ने परिणाम प्रकार के भिन्नता एनोटेशन के लिए कोई नियम प्रदान किया है। तो मुझे समझ में नहीं आता कि यह सकारात्मक क्यों है। पाठ ने यह नहीं कहा, "इसे परिणाम प्रकार पैरामीटर पर भी फ़्लिप करें।" तो आप कह रहे हैं कि लेखक ने मनमाने ढंग से परिणाम परिणाम एनोटेशन को सभी परिणामों के लिए सकारात्मक रखने का फैसला किया ?? यह थोड़ा मनमाना है .. – platypus

+0

मेरी व्याख्या यह है कि रिटर्न प्रकार का कोई विशेष नियम नहीं है, इसलिए "फास्ट ट्रैक" के तीसरे पैराग्राफ की वाक्य लागू होती है: "घोषित वर्ग के * शीर्ष स्तर * पर स्थितियां * सकारात्मक के रूप में वर्गीकृत की जाती हैं *। " – eold

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