2016-05-30 4 views
0

Ich habe diesen Code untenKann nicht in scala von foreach-Schleife Breakout

> .foreach("${plist}", "newshole") { 
>  exec(
>   http("get the user id") 
>   .get("${newshole}/jcr:content.1.json") 
>   .headers(headers_2) 
>   .check(bodyString.saveAs("Res1")) 
>  ) 
>  exec(session => { 
>   var mynewshole = session("Res1").as[String] 
>   if (!mynewshole.contains("testingInProgress")) { 
>   println("Doesn't contain: " + mynewshole) 
>   (http("post the user id") 
>    .post("${newshole}/jcr:content") 
>    .headers(headers_2) 
>    .formParam("testingInProgress", session.userId)) 
>   exec(http("Create print package") 
>    .post("/bin/cqtg-create-print-package.do") 
>    .headers(headers_2) 
>    .formParam("newsholeId", "${plist}") 
>    .formParam("digitalMasterId", "1adpy8") 
>    .check(status.is(200))) 
> 
>   } 
>   session 
>  }) 
>  } 

i heraus brechen will:

> if (!mynewshole.contains("testingInProgress")) { 
>   println("Doesn't contain: " + mynewshole) 
>   (http("post the user id") 
>    .post("${newshole}/jcr:content") 
>    .headers(headers_2) 
>    .formParam("testingInProgress", session.userId)) 
>   exec(http("Create print package") 
>    .post("/bin/cqtg-create-print-package.do") 
>    .headers(headers_2) 
>    .formParam("newsholeId", "${plist}") 
>    .formParam("digitalMasterId", "1adpy8") 
>    .check(status.is(200))) 
> 
>   } 
>   session 

im Grunde aus der Schleife ausbrechen will ich, wenn meine erste Bedingung erfüllen. Also möchte ich den untenstehenden Code wie in den Scala-Tutorials verwenden, weiß aber nicht, wo ich den breakable-Befehl setzen soll, da er mir Fehler gibt.

> breakable{ 
>    code() 
>   break; 
>   } 

aber ich weiß nicht wo ich es hinstellen soll.Any Idea ????

+2

können Sie ** Rekursion ** betrachten, da Sie Scala verwenden :-) – pietro909

+0

im Grunde möchte ich einfach aus der Schleife als Scala Donot brechen brechen oder weiter explizit definiert.Sorry etwas neues in Scala brauchen Hilfe! !! :( – shab

Antwort

3

Scala bietet nicht wirklich einfach zu bedienende break/continue Control Flow Primitive. Es ist nicht die funktionale Art, Dinge zu tun.

Die meisten Methoden, die in Scala-Sammlungen verfügbar sind, wie foreach, wurden entwickelt, um die gesamte Sammlung zu prüfen/zu modifizieren. Die Ausnahmen sind: contains, corresponds, exists, forall, indexWhere usw. Sie werden feststellen, dass die meisten (alle?) Mit Booleans umgehen, entweder als Argument (eine Prädikatfunktion) oder als Rückgabetyp.

Wenn Ihr Algorithmus nicht überarbeitet werden kann, um eine dieser lazy-evaluated-Methoden zu verwenden, dann empfehle ich @ pietro909's Ratschlag zu nehmen und es als rekursive Funktion neu zu gestalten, die bei jedem Aufruf/Rekursion nach einer oder mehreren Exit-Bedingungen testet .

Ich weiß, dass nicht wirklich das, was Sie gefragt, und es ist wahr, man kann erreichen, was Sie wollen, indem ein breakable Block im Code eingefügt, aber wenn Sie inspect the source werden Sie sehen, dass die Pausen durch das Werfen/umgesetzt werden Abfangen von Ausnahmen, was ziemlich ineffizient ist und normalerweise zu vermeiden ist.

Aber wenn Sie entschlossen sind, diesen Weg zu gehen, sollte dies einige Hinweise liefern:

scala> import util.control.Breaks 
import util.control.Breaks 

scala> val mybreaks = new Breaks 
mybreaks: scala.util.control.Breaks = [email protected] 

scala> import mybreaks.{break, breakable} 
import mybreaks.{break, breakable} 

scala> breakable { 
    | (1 to 34).foreach(x => if (x > 9) break else println(x)) 
    | println("all done") 
    | } 
1 
2 
3 
4 
5 
6 
7 
8 
9 

Hinweis: Die break nicht nur die foreach() Anweisung beenden, bricht es aus dem gesamten breakable Block .

Verwandte Themen