ABAP中的条件输入

时间:2018-06-26 14:32:45

标签: type-conversion sap abap ternary-operator

我们都知道这个新的伪三元运算符为COND:

COND #( WHEN 1 = 1 THEN something ELSE everything ).

但是,最近在实践中,我注意到键入返回变量的过程很奇怪:它总是获得第一个THEN操作数的类型,并且已由ABAP help确认。

>
  

如果操作数类型不是完全可识别的,则必须在第一个THEN之后指定具有静态可识别类型的操作数(将构造函数参数传递给带有通用类型形式参数的实际参数时除外)。 然后使用此类型。

DATA(val) = COND #( WHEN quantity NE '0.00' THEN CONV wrbtr( quantity ) ELSE '' )

在此示例中,val变量将始终具有打包类型忽略 quantity的值。

我们如何在此处实现条件键入?即WRBTR类型为非空数量,字符串类型为空数量。 在将内部数据传递给外部系统,外部方法/ FMS以及外部格式(Excel,CSV)的过程中,经常需要这样做。

CONDCONV运算符是否缺少某些语法?我们能否在他们的帮助下实现这一目标?或者,也许还有一些更高级的语法,除了

IF quantity NE '0.00'.
  val = VALUE wrbtr(  ).
ELSE.
  val = VALUE string(  ).
ENDIF.

1 个答案:

答案 0 :(得分:2)

ABAP中没有条件键入。作为一种完全类型化的语言,每个变量在编译时都需要一个确定的类型。

顺便说一句,您提供的示例不起作用:

DATA quantity TYPE wrbtr.
DATA val TYPE wrbtr.
IF quantity NE '0.00'.
  val = '3.12'.
ELSE.
  val = VALUE string(  ).
ENDIF.
即使执行了val

wrbtr仍将具有类型ELSE。 ABAP首先将值转换为string,然后转换为目标wrbtr