相关疑难解决方法(0)

为什么嵌套的LOOP AT SCREEN会导致无限循环/递归?

这是给你的。尽管这种语言构造没有多大意义,但我想知道为什么嵌套LOOP AT SCREEN会导致无限循环(递归?)。

让我们采用以下简单程序。

REPORT yyy.

PARAMETERS:
  p_x1 TYPE abap_bool.

AT SELECTION-SCREEN OUTPUT.
  LOOP AT SCREEN.
    BREAK-POINT.
  ENDLOOP.
Run Code Online (Sandbox Code Playgroud)

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.
Run Code Online (Sandbox Code Playgroud)

看来嵌套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. …
Run Code Online (Sandbox Code Playgroud)

sap abap

5
推荐指数
1
解决办法
218
查看次数

标签 统计

abap ×1

sap ×1