이전 답변은 비교적 제약이없는 상황에서 스칼라에 대해 break
또는 continue
언어 전체 방식으로 의미를 정의하는 문제에 대한 정의를 수행한다고 생각합니다 .
내가 쓴 작은 도서관을 하도록 정의 break
하고 continue
보다 제약 맥락에서 : 반복 시퀀스를 통해 스칼라를 통해를위한 함축. 그 맥락에 집중함으로써, 나는 시맨틱 스가 모호하지 않고 추론하기 쉽다고 믿는다.
라이브러리는 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
는 기능을 순서대로 종료하는 방법이며, 정리 기계는 이미 존재합니다.