这是给你的。尽管这种语言构造没有多大意义,但我想知道为什么嵌套的LOOP AT SCREEN
会导致无限循环(递归?)。
让我们采用以下简单程序。
REPORT yyy.
PARAMETERS:
p_x1 TYPE abap_bool.
AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
BREAK-POINT.
ENDLOOP.
BREAK-POINT
语句将仅执行4次。这导致了这样的嵌套循环将运行16次的假设。相反,下面提到的程序将永远运行并以超时异常结束。
REPORT yyy.
PARAMETERS:
p_x1 TYPE abap_bool.
AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
LOOP AT SCREEN.
ASSERT 1 = 1.
ENDLOOP.
ENDLOOP.
嵌套LOOP AT SCREEN
似乎会导致无限循环或某种无限递归。
为什么会这样?是否记录在某处?扩展检查不报告有关循环的任何内容。同样适用于代码检查器。
编辑
我还检查了这是否是带有标题行的内部表的普遍问题。好像没有。
REPORT YYY.
DATA: gt_t000 TYPE t000 OCCURS 10 WITH HEADER LINE.
START-OF-SELECTION.
SELECT * FROM t000
INTO TABLE gt_t000[].
LOOP AT gt_t000.
LOOP AT gt_t000.
WRITE / gt_t000-mandt.
ENDLOOP.
ENDLOOP.