2010-07-26 40 views
2

Est (et pourquoi) cela devrait vraiment être interdite à l'exception?scala nouvelle gamme à l'étape est égale à zéro

scala> val r2 = 15 until (10, 0) 

java.lang.IllegalArgumentException: requirement failed 

scala> new Range(10,15,0) 

java.lang.IllegalArgumentException: requirement failed 
    at scala.Predef$.require(Predef.scala:133) 

Répondre

8

Est (et pourquoi) cela devrait vraiment être interdite à l'exception?

Citation de scaladoc:

La classe de portée représente des valeurs entières dans la fourchette [démarrer; fin) avec non nulle étape étape de valeur. Le tri des actes comme une séquence aussi (supporte la longueur et contient).

Cette restriction est logique. Une plage avec un pas de taille zéro sera toujours infine et se composera simplement de la valeur de borne inférieure. Alors qu'on pourrait argumenter que des fourchettes infinies sont possibles (évaluation paresseuse), le concept d'une borne supérieure dans la fourchette serait pris par absurdum. Une gamme à l'étape 0 est tout simplement pas une gamme, même si elle est infiniment longue, parce que la limite supérieure n'a pas d'importance.

Donc, si l'on veut vraiment un flux infini d'une valeur unique, Scala nous oblige à juste titre d'être plus explicite.

+0

thnx, devrait vraiment être plus attentif à la lecture scaladoc – sgp