Quantcast
Channel: SCN : Popular Discussions - ABAP和Java开发 (ABAP & Java Development)
Viewing all articles
Browse latest Browse all 4604

千万别这样写ABAP代码

$
0
0

今天调试程序中碰到一个诡异的问题,调了1个多小时,发现居然是这样一个错误,这个问题很难发现,所以写出来供大家参考。

 

千万别这样写ABAP 程序,否则你可能会连自己怎么死都不知道:

 

 

 

我修改了项目中的程序,抽出了这么一段:

 

 

 

REPORT  Z_TEST_LOOP.

 

do 10 times.

 

  DATA : lv_bool type char1 value space.

 

 

 

  if sy-index = 5.

 

     lv_bool = 'X'.

 

  endif.

 

 

 

  if lv_bool = 'X'.

 

    write 'true'.

 

  else.

 

    write 'false'.

 

  endif.

 

 

 

  new-line.

 

 

 

enddo.

 

 

 

代码逻辑非常简单,就是做个循环,一共做10次,当第五次的时候将标志为变成true,照理说循环的每次开头都会调用DATA : lv_bool type char1 value space.所以只要不设置,都会变成false。

 

 

问题来了,从第5次开始,所有的lv_bool都是true,再也改不回来了。

 

原来ABAP程序的变量作用域是一个method 或者function module ,而不是我们通常概念上的块,因此,当系统在循环时,由于系统变量已经定义,则定义的字段不再执行,默认为上一次循环得值,就产生了上面的问题。所以,定义必须写成:

 

DATA : lv_bool type char1.

 

lv_bool = space.

 

如果这段程序在一个大程序内出现,真还是比较难调,仅以此文,供各位ABAPer参考。


Viewing all articles
Browse latest Browse all 4604

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>