以前の答えは、セマンティクスを定義する問題に正義があると思います breakcontinue、比較的制約のないコンテキストを使用して、Scalaのまたは言語全体。
私は定義する小さなライブラリを書きましたbreakし、continueより多くの制約のコンテキストで:反復シーケンスを超えるScalaの経由のため、内包。そのコンテキストに注目することで、セマンティクスが明確になり、推論しやすくなると思います。
ライブラリはこちらから入手できます:https : //github.com/erikerlandson/breakable
コードでどのように見えるかの簡単な例を次に示します。
scala> import com.manyangled.breakable._
import com.manyangled.breakable._
scala> val bkb2 = for {
     |   (x, xLab) <- Stream.from(0).breakable   // create breakable sequence with a method
     |   (y, yLab) <- breakable(Stream.from(0))  // create with a function
     |   if (x % 2 == 1) continue(xLab)          // continue to next in outer "x" loop
     |   if (y % 2 == 0) continue(yLab)          // continue to next in inner "y" loop
     |   if (x > 10) break(xLab)                 // break the outer "x" loop
     |   if (y > x) break(yLab)                  // break the inner "y" loop
     | } yield (x, y)
bkb2: com.manyangled.breakable.Breakable[(Int, Int)] = com.manyangled.breakable.Breakable@34dc53d2
scala> bkb2.toVector
res0: Vector[(Int, Int)] = Vector((2,1), (4,1), (4,3), (6,1), (6,3), (6,5), (8,1), (8,3), (8,5), (8,7), (10,1), (10,3), (10,5), (10,7), (10,9))
               
              
break、continueいくつかの追加のクリーンアップ機械が必要です。OTOHreturnは機能を正常に終了する方法であり、いずれにせよクリーンアップ機構はすでに存在しています。