我们都知道这个新的伪三元运算符为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)的过程中,经常需要这样做。
COND
和CONV
运算符是否缺少某些语法?我们能否在他们的帮助下实现这一目标?或者,也许还有一些更高级的语法,除了
IF quantity NE '0.00'.
val = VALUE wrbtr( ).
ELSE.
val = VALUE string( ).
ENDIF.
答案 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
。