2012-09-15 28 views
6

根據方法Range.endScala documentation,它返回「範圍的獨佔結束」。那麼爲什麼它會爲tountil表示法返回相同的值?例如:斯卡拉Range範圍內的獨家結尾

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',它導致['Inclusive'](http://www.scala-lang.org/api/current/scala/collection/immutable/Range$$Inclusive.html)。 – oldrinb

+2

我從來沒有聽說過'end',但如果你想要最後一個元素,可以使用'last'。 Scala的文檔有時不是最好的。 –

回答

12

tountil分別導致相關但不同Range類別:Range.InclusiveRange; Range.Inclusive IS-A Range

  • isInclusive將區分兩種類別類型。

  • end,或上限,在範圍的上下文中被解釋爲排他性的或包含性的。上限是範圍說明中提供的第二個數字,在原始問題的兩個示例中都是10。是的,如果範圍從高到低(即1 until -10),則該「上限」可能小於「下限」。

  • last將返回範圍中的最後一個值,這可能是您試圖從end獲得的值。