ABAP에서 가장 중첩 된 루프에서 가장 바깥 쪽 루프를 계속 수행 할 수있는 방법이 있습니까?가장 중첩 된 루프에서 가장 바깥 쪽 루프 계속
Java의 예. 이 언어에는 레이블을 사용하는 구조가 있습니다. 대부분의 사람들은 중첩 된 루프에서 가장 바깥 쪽 루프를 계속할 수 있습니다.
public class NestedLoopContinue {
public static void main(String[] args) {
label1: for (int i = 0; i < 5; i++) {
for (int j = 0; j < 2; j++) {
if (i == 3) {
continue label1;
}
}
System.out.println(i + 1);
}
}
}
이 지금
1
2
3
5
출력, 나는 똑똑한 방법으로 ABAP에서 그것을 할 수 있습니까? 한 가지 해결책은 TRY. ENDTRY.
블록을 사용하는 것이지만 해킹 방법입니다. 다른 아이디어?
DATA: l_outer_counter TYPE i.
DO 5 TIMES.
l_outer_counter = sy-index.
TRY.
DO 2 TIMES.
IF l_outer_counter = 4.
RAISE EXCEPTION TYPE cx_abap_random.
ENDIF.
ENDDO.
WRITE/l_outer_counter.
CATCH cx_abap_random.
CONTINUE.
ENDTRY.
ENDDO.
또는 어쩌면 DO. ENDO.
이 (SYST
전역 변수와 같은 과정의 자신의 변수를 도입하지 않고)는 EXIT
문으로 종료 여부를 알 수있는 방법은 무엇입니까?
DATA: l_outer_counter TYPE i.
DO 5 TIMES.
l_outer_counter = sy-index.
DO 2 TIMES.
IF l_outer_counter = 4.
EXIT.
ENDIF.
ENDDO.
IF sy-last_loop_ended_with_exit = abap_true. "???
CONTINUE.
ENDIF.
WRITE/l_outer_counter.
ENDDO.
호기심에서 벗어난 -이 실제적인 응용 프로그램은 무엇입니까? – vwegert
@vwegert 예, 실용적인 응용 프로그램이 있습니다. 사실 나는'LOOP AT'를 사용합니다.내가 가지고있는 바깥 쪽 루프에는 객체가 들어 있는데, 안쪽 루프에는 바깥 쪽 루프에서 얻은 식별자로 호출하는 동일한 인터페이스 구현에 대한 참조가 들어 있습니다. 메소드 호출의 결과에 기초하여 다음 outer 루프 객체로 진행하거나 내부 루프의 나머지 부분과 외부'ENDLOOP' 앞에 오는 것을 계속하고 싶습니다. – Jagger
나는 질문을 편집했다. 루프를 끝낼 때 ('SY' 플래그 중 하나 일까?) 'EXIT'가 있었는지 여부를 알려주는 방법도이 경우에 좋은 대안이 될 것입니다. 그러면이 플래그에 기반한 'CONTINUE'가 가능합니다. – Jagger