zoukankan      html  css  js  c++  java
  • ABAP 内表(internal table) 标题行(header line) 工作区(work area) 简介

     

    刚开始学ABAP的时候,学到iternal table时,感觉一阵混乱.
    搞不清楚什么是work area,什么是header line,以及occurs是干什么用的.
    今天终于差不多搞明白了(我还是太弱啊...BS自己一下)
    所以还是记录下来..省得自己以后再忘记...

    先是用TYPES关键字定义一个行(row)的类型.如下:
    TYPES: BEGIN OF line,
      field1 TYPE i,
      field2 TYPE i,
    END OF line.

    这里的line,就相当于一个自定义的类型,表示一行(row)的字段(field).
    这里一行有两个字段field1和field2.

    然后是声明一个work area:
    DATA wa TYPE line.
    我用C++(还是对cpp最有好感^^)的概念理解就是,
    line是一个class,而wa是一个object.

    接着是声明一个每一行的类型是line的internal table:
    DATA itab TYPE line OCCURS 0.
    我在暂时把OCCURS作为了区别工作区和内表的标志.
    OCCURS应该有更深层次的意义,但我目前只能领悟至此...
    当我们用以上这个方法来声明一个iternal table时,可以选择是否有无header line.
    上面这句就是没有header line的.改成如下就有了:
    DATA itab TYPE line OCCURS 0 WITH HEADER LINE.
    有无header line的区别就是,header line可以当作一个work area来使用(参照我之前的一个日志).
    有一下两种方式操作itab:
    1).
    wa-field1 = 1.
    wa-field2 = 2.
    APPEND wa TO itab.

    2).
    itab-field1 = 1.
    itab-field2 = 2.
    APPEND itab.

    这里wa就是上面那个已经定义的work area.
    有header line的时候,这两种都可以.
    无header line的时候,只能用第1种.
    第2种里,itab的意义是一个header line,而不是内表.
    因为"DATA itab TYPE line OCCURS 0 WITH HEADER LINE."这样的声明,
    已经隐式声明了一个与内表同名的header line.
    所以OCCURS用来声明内表可能造成二义性(ambiguous).
    于是,OCCURS被认为是old的东西,采用一下方式声明一个内表比较好:
    DATA itab TYPE STANDARD TABLE OF line.

    还有一种声明内表的方法:
    DATA: BEGIN OF itab OCCURS 0,
                  field1 TYPE i,
                  field2 TYPE i,
               END OF itab.

    这样的itab就自动有了一个同名的header line.
    好像不会有 WITHOUT HEADER LINE 或者 NOT WITH HEADER LINE 这样的用法...
    如果没有OCCURS 0,比如这样:
    DATA: BEGIN OF itab,
                  field1 TYPE i,
                  field2 TYPE i,
              END OF itab.

    那么这个itab就不是内表咯,只是一个structure,可以作为itab的work area.

    写到这里发现,归根到底就是TYPES和DATA这两个关键字的区别嘛.
    还有有无OCCURS的区别.

    这样一想,简单明了~~

  • 相关阅读:
    类例程_java战斗程序
    "类"的讲稿
    象棋中“车”的攻击范围_C#
    面向对象_方法_例题
    入门例子
    MyBatis
    MyBatis
    MyBatis
    Spring
    Hibernate学习
  • 原文地址:https://www.cnblogs.com/hanmos/p/3447281.html
Copyright © 2011-2022 走看看