代码之家  ›  专栏  ›  技术社区  ›  jcjr Thunder-KC Inc

将返回类型定义为方法的压缩数

  •  2
  • jcjr Thunder-KC Inc  · 技术社区  · 7 年前

    我正在学习abap对象。我希望有一个返回压缩数字类型的对象方法。我终于做到了,但我不知道这是不是正确的方式,我需要一些进一步的解释,我在网上找不到。

    对于integer,它工作正常:

    METHODS: getamount RETURNING VALUE(r) TYPE i,
    

    对于打包号码,它不:

    METHODS: getamount RETURNING VALUE(r) TYPE p,
    

    错误:必须完全指定返回参数的类型

    METHODS: getamount RETURNING VALUE(r) TYPE p LENGTH 10 DECIMALS 3,
    

    错误:必须完全指定返回参数的类型

    (1)有没有办法让它与 p 类型?

    我通过使用 dec5_2 :

    getamount RETURNING VALUE(r) TYPE dec5_2
    

    (2)这是正确的选择吗?有类似类型的清单吗?

    而且,我发现 this solution ,但这对我不起作用:

    CLASS lcl_rowinvoice DEFINITION.
      PUBLIC SECTION.
        METHODS:
          getamount RETURNING VALUE(r) TYPE typeprice,  
      PRIVATE SECTION.
        TYPES:
          typeprice TYPE p LENGTH 10 DECIMALS 2,
    

    未知类型“typeprice”。

    (3)有没有办法使这个解决方案发挥作用?

    2 回复  |  直到 7 年前
        1
  •  3
  •   jcjr Thunder-KC Inc    7 年前

    返回的参数必须是完全类型的,p是泛型类型,因此有三个选项:

    1. 使用数据字典中的预定义数据元素(se11=>data 元素)

     METHODS getamount RETURNING value(r) TYPE netwr.
    
    1. 使用在本地类的公共部分中定义的类型

    TYPES: lty_p TYPE p LENGTH 15 DECIMALS 2.
    METHODS getamount RETURNING value(r) TYPE lty_p.
    
    1. 使用完全预定义的类型(decfloat16或decfloat34)

    METHODS getamount RETURNING value(r) TYPE decfloat16.
    
        2
  •  1
  •   Suncatcher    7 年前

    你在这里提出的问题很有趣。

    It is common rule 在abap中,声明类型和对象仅从声明的行开始生效:

    可以从此位置在当前上下文中查看定义的数据类型。

    但是!但是这里我们有一个有趣的与abap objects类的冲突 definition syntax

    CLASS class DEFINITION [class_options]. 
      [PUBLIC SECTION. 
        [components]] 
      [PROTECTED SECTION. 
        [components]] 
      [PRIVATE SECTION. 
        [components]] 
    ENDCLASS. 
    

    定义期间可视区域的相互位置 是固定的 你不能随心所欲地改变它们。

    虽然它与abap可见性概念并不矛盾,但从技术上讲,在私有部分声明类型并在公共部分使用它是不可能的。这种类型的声明位置将位于公共部分的下方,因此实际上对其不可见。

    但如果您更改声明/使用部分的顺序,则所有内容都将被编译。

    CLASS lcl_rowinvoice DEFINITION.
    
    PUBLIC SECTION.
       TYPES: typeprice TYPE p LENGTH 10 DECIMALS 2.
    
    PRIVATE SECTION.
       METHODS: getamount RETURNING VALUE(r) TYPE typeprice.
    
    ENDCLASS.  
    
    推荐文章