2012-09-15 25 views
6

Range.end विधि के लिए Scala documentation के अनुसार, यह "सीमा का अनन्य अंत" देता है। तो यह to और until नोटेशन दोनों के लिए समान मान क्यों देता है? उदाहरण के लिए:स्कैला के रेंज क्लास

Welcome to Scala version 2.9.2 (Java HotSpot(TM) Server VM, Java 1.7.0). 
Type in expressions to have them evaluated. 
Type :help for more information. 

scala> (1 to 10).end 
res0: Int = 10 

scala> (1 until 10).end 
res1: Int = 10 

res0 == 11 नहीं होना चाहिए?

+1

[ 'RichInt.to'] (http://www.scala-lang.org/api/current/scala/runtime/RichInt.html) एक मात्र' Range' में परिणाम नहीं करता है, यह परिणाम ['समावेशी '] में परिणाम (http://www.scala-lang.org/api/current/scala/collection/immutable/Range$$Inclusive.html)। – oldrinb

+2

मैंने पहले कभी 'अंत' के बारे में नहीं सुना है, लेकिन यदि आप अंतिम तत्व चाहते हैं, तो 'अंतिम' का उपयोग करें। स्कैला का दस्तावेज कभी-कभी सबसे अच्छा नहीं होता है। –

उत्तर

12

to और संबंधित लेकिन अलग Range कक्षाओं में until परिणाम: Range.Inclusive और Range क्रमश; Range.Inclusive IS-A Range

  • isInclusive दो वर्ग प्रकारों के बीच अंतर करेगा।

  • end, या ऊपरी बाउंड, विशिष्ट या समावेशी सीमा के संदर्भ में व्याख्या की गई है। ऊपरी बाउंड रेंज विनिर्देश में प्रदान किया गया दूसरा नंबर है, जो मूल प्रश्न में दोनों नमूना मामलों में 10 था। और हां, यह सीमा "निचली बाध्य" से कम हो सकती है, यदि सीमा उच्च से कम हो जाती है (यानी 1 until -10)।

  • last श्रेणी में अंतिम मूल्य लौटाएगा, जो आप end से प्राप्त करने का प्रयास कर रहे थे।