Vous disposez de trois (ou plus) des options pour sortir de la boucle.
Supposons que vous souhaitez calculer la somme des nombres jusqu'à ce que le total est supérieur à 1000. Vous essayez
var sum = 0
for (i <- 0 to 1000) sum += i
sauf que vous voulez arrêter quand (somme > 1000).
Que faire? Il y a plusieurs options.
(1a) Utilisez construction qui comprend une condition que vous testez.
var sum = 0
(0 to 1000).toStream.takeWhile(_ => sum < 1000).foreach(i => sum+=i)
(1b) l'Utilisation de la queue de la récursivité au lieu d'une boucle for, profitant de combien il est facile d'écrire une nouvelle méthode en Scala:
var sum = 0
def addTo(i: Int, max: Int) {
sum += i; if (sum < max) addTo(i+1,max)
}
addTo(0,1000)
(2) lève une exception.
object AllDone extends Exception { }
var sum = 0
try {
for (i <- 0 to 1000) { sum += i; if (sum>=1000) throw AllDone }
} catch {
case AllDone =>
}
(2a) En Scala 2.8+ c'est déjà pré-emballés, en scala.util.control.Breaks
l'aide d'une syntaxe qui ressemble beaucoup à votre familier ancienne pause de C/Java:
import scala.util.control.Breaks._
var sum = 0
breakable { for (i <- 0 to 1000) {
sum += i
if (sum >= 1000) break
} }
(3) Mettre le code dans une méthode et l'utilisation de retour.
var sum = 0
def findSum { for (i <- 0 to 1000) { sum += i; if (sum>=1000) return } }
findSum
C'est intentionnellement fait de ne pas-trop-facile pour au moins trois raisons je pense. Tout d'abord, dans de grands blocs de code, il est facile de négliger "continuer" et "pause", ou de penser que vous êtes en rupture de plus ou de moins que vous êtes vraiment, ou à la nécessité de briser les deux boucles qui vous ne pouvez pas faire facilement de toute façon--donc l'usage standard, bien que pratique, a ses problèmes, et donc vous devriez essayer de structurer votre code d'une manière différente. Deuxièmement, Scala a toutes sortes d'imbrications que vous n'avez probablement pas le même avis, donc si vous pouviez sortir de choses, vous seriez probablement surpris par l'endroit où le flux de code clos (surtout avec des fermetures). Troisièmement, la plupart de la Scala de "boucles" ne sont pas vraiment normal boucles--ils sont les appels de méthode qui ont leur propre boucle, ou ils sont de récursivité qui peut ou peut ne pas être une boucle--et, bien qu'ils agissent looplike, il est difficile de trouver une manière cohérente, à savoir ce "break" et les comme devrait le faire. Donc, pour être cohérent, le plus sage chose à faire est de ne pas avoir un "break".