2013-01-14 21 views
6

मैं RedBlackTree फ़ाइल का स्रोत देख रहा था और मैं Tree के लिए परिभाषा पर ठोकर खाई, प्रासंगिक जिसका एक भाग मैं यहाँ की नकल की है:स्काला RedBlackTree वाक्य रचना

:

sealed abstract class Tree[A, +B](
@(inline @getter) final val key: A, 
@(inline @getter) final val value: B, 
@(inline @getter) final val left: Tree[A, B], 
@(inline @getter) final val right: Tree[A, B]) 

2 प्रश्न हैं

  1. @(inline @getter)@inline @getter से तुलना कैसे करता है?
  2. valfinal के साथ योग्य क्यों हैं? (इस प्रसंग में निरर्थक नहीं final है?)

उत्तर

8

@(inline @getter) वाक्य रचना एक मेटा एनोटेशन, जो संकलक कि @inline एनोटेशन उत्पन्न गेटर पद्धति पर रखा जाना चाहिए (के रूप में करने का विरोध किया constructer बताता है का एक उदाहरण है पैरामीटर, जो यहां डिफ़ॉल्ट होगा): meta annotations

final उत्पन्न फ़ील्ड और गेटटर को अंतिम के रूप में चिह्नित करता है, इसलिए उन्हें उप-वर्गों द्वारा ओवरराइड नहीं किया जा सकता है।

इस विशेष संयोजन का उपयोग स्केल कंपाइलर को सीधे Tree उदाहरणों के क्षेत्र तक पहुंचने के लिए, गेटर्स को कॉल करने और उचित इनलाइनिंग करने के लिए JVM ऑप्टिमाइज़र पर निर्भर करने के लिए किया गया था। दुर्भाग्य से स्कैला सीधे खेतों का उपयोग करने के लिए आधिकारिक रूप से समर्थित तरीका प्रदान नहीं करता है।

जब स्काला 2.10 के लिए रेडब्लैक पेड़ अनुकूलित किया गया था तो इसने सबसे अच्छा प्रदर्शन दिया। गोर के विवरण के लिए अपरिवर्तनीय TreeMap/TreeSet pull request देखें।

+0

मैंने पहले से ही कुछ पुल अनुरोध पढ़ा था, लेकिन मैंने पहले कभी नहीं देखा, इसे समझाने के लिए पॉपिंग के लिए धन्यवाद! –

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