2012-09-15 25 views
6

De acuerdo con Scala documentation para el método Range.end, devuelve "el extremo exclusivo del rango". Entonces, ¿por qué devuelve el mismo valor para las anotaciones to y until? Por ejemplo:Extremo exclusivo en la clase de rango de Scala

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 

¿No debería res0 == 11?

+1

[ 'RichInt.to'] (http://www.scala-lang.org/api/current/scala/runtime/RichInt.html) no da lugar a un simple' Range', se da como resultado un ['Inclusive'] (http://www.scala-lang.org/api/current/scala/collection/immutable/Range$$Inclusive.html). – oldrinb

+2

Nunca había escuchado sobre el 'final' antes, pero si quiere el último elemento, use 'last'. La documentación de Scala a veces no es la mejor. –

Respuesta

12

to y until resultado en relacionadas pero diferentes Range clases: Range.Inclusive y Range, respectivamente; Range.Inclusive IS-A Range.

  • isInclusive distinguirá entre los dos tipos de clases.

  • end, o el límite superior, se interpreta en el contexto de que el rango sea exclusivo o inclusivo. El límite superior es el segundo número proporcionado en la especificación de rango, que fue 10 en ambos casos de muestra en la pregunta original. Y sí, este "límite superior" puede ser menor que el "límite inferior", si el rango va de mayor a menor (es decir, 1 until -10).

  • last devolverá el último valor en el rango, que puede ser lo que estaba tratando de obtener de end.

Cuestiones relacionadas