2011-05-29 10 views
7

मैं एक मजबूत जावा डेवलपर हूं जिसने हाल ही में अपने खाली समय में स्कैला लेने की कोशिश करना शुरू कर दिया है। मैं scala-lang.org से Scala by Example पीडीएफ के माध्यम से जा रहा हूं और उलझन में हूं कि पहले उदाहरण में त्वरित क्रम कैसे काम करता है। यहां कोड है:स्कैला कैसा है। एक सेक्र को निकालें?

object QuickSort extends App { 

    def sort(input: Array[Int]): Array[Int] = { 
    if(input.length <= 1) input 
    else 
    { 
     val pivot = input(input.length/2) 
     Array.concat(
      sort(input filter (pivot >)), 
       input filter (pivot ==), 
      sort(input filter (pivot <)) 
    ) 
    } 
    } 

    sort(Array(5, 4, 3, 2, 1)) foreach println 
} 

मेरा प्रश्न वाक्यविन्यास या कुछ भी नहीं है, लेकिन मैं उलझन में हूं कि फ़िल्टर फ़ंक्शन कहां से आता है। पीडीएफ के अनुसार, यह कहता है कि यह सेक [टी] वर्ग से आता है, और सभी Arrays Seq [टी] के उदाहरण हैं। यह सब ठीक और बेवकूफ है और पीडीएफ पढ़ने के दौरान मैं संतुष्ट था और एक बहुत ही खुश नौसिखिया स्कैला डेवलपर था। लेकिन फिर मैंने थोड़ा गहरा खोला और scaladoc for Array[T] और ऐरे [टी] के लिए स्रोत कोड भी देखना शुरू कर दिया और मुझे नहीं पता कि कैसे ऐरे [टी] वर्ग सीक [टी] विशेषता को विस्तारित करता है या विरासत में आता है। मैं क्या खो रहा हूँ?

उत्तर

9

आप प्रत्यारोपण खो रहे हैं। स्टैक ओवरफ़्लो पर fewquestionsimplicits पर है। पीडीएफ पर आप पढ़ रहे हैं, पेज 113 पर शुरू होने वाले अध्याय 15 देखें। स्कैलाडोक पर, आप ऑब्जेक्ट scala.Predef पर प्रासंगिक implicits देखेंगे - केवल इनपुट पैरामीटर के रूप में Array लेते हैं और कुछ और लौटाते हैं।

पीएस: यिक्स, यह कहता है ArraySeq है! यह वास्तव में स्कैला 2.8 से पहले मामला हो सकता है, लेकिन तब से Array जावा Array, शुद्ध और सरल है।

3

प्रीडिफ में लपेटा हुआ ऐरे में एक निहित रूपांतरण है। Scala Arrays vs Vectors देखें।

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