ABAP 中的条件输入
Conditional typing in ABAP
我们都知道这个奇特的新伪三元运算符是 COND:
COND #( WHEN 1 = 1 THEN something ELSE everything ).
然而,最近在实践中我注意到返回变量类型的奇怪之处:它总是获取第一个 THEN 操作数的类型并且这已被[=19确认=].
If the operand type is not fully identifiable, an operand with a statically identifiable type must be specified after the first THEN (except when passing the constructor parameter to an actual parameter with generically typed formal parameter). This type is then used.
DATA(val) = COND #( WHEN quantity NE '0.00' THEN CONV wrbtr( quantity ) ELSE '' )
在此示例中,val
变量将始终具有压缩类型 忽略 quantity
的值。
这里如何实现条件输入? IE。 WRBTR
类型为非空数量,字符串类型为空数量。
在将内部数据传递到外部系统、外部 methods/FMS 以及外部格式(Excel、CSV)时,这通常是一个要求。
COND
和 CONV
运算符是否缺少某些语法?我们能否在他们的帮助下实现这一目标?或者除了
之外还有一些更高级的语法
IF quantity NE '0.00'.
val = VALUE wrbtr( ).
ELSE.
val = VALUE string( ).
ENDIF.
ABAP 中没有条件类型。作为一种完全类型化的语言,每个变量在编译时都需要一个明确的类型。
顺便说一句,您提供的示例不起作用:
DATA quantity TYPE wrbtr.
DATA val TYPE wrbtr.
IF quantity NE '0.00'.
val = '3.12'.
ELSE.
val = VALUE string( ).
ENDIF.
即使执行了 ELSE
,val
仍将具有类型 wrbtr
。 ABAP 首先将值转换为 string
,然后转换为目标 wrbtr
.
我们都知道这个奇特的新伪三元运算符是 COND:
COND #( WHEN 1 = 1 THEN something ELSE everything ).
然而,最近在实践中我注意到返回变量类型的奇怪之处:它总是获取第一个 THEN 操作数的类型并且这已被[=19确认=].
If the operand type is not fully identifiable, an operand with a statically identifiable type must be specified after the first THEN (except when passing the constructor parameter to an actual parameter with generically typed formal parameter). This type is then used.
DATA(val) = COND #( WHEN quantity NE '0.00' THEN CONV wrbtr( quantity ) ELSE '' )
在此示例中,val
变量将始终具有压缩类型 忽略 quantity
的值。
这里如何实现条件输入? IE。 WRBTR
类型为非空数量,字符串类型为空数量。
在将内部数据传递到外部系统、外部 methods/FMS 以及外部格式(Excel、CSV)时,这通常是一个要求。
COND
和 CONV
运算符是否缺少某些语法?我们能否在他们的帮助下实现这一目标?或者除了
IF quantity NE '0.00'.
val = VALUE wrbtr( ).
ELSE.
val = VALUE string( ).
ENDIF.
ABAP 中没有条件类型。作为一种完全类型化的语言,每个变量在编译时都需要一个明确的类型。
顺便说一句,您提供的示例不起作用:
DATA quantity TYPE wrbtr.
DATA val TYPE wrbtr.
IF quantity NE '0.00'.
val = '3.12'.
ELSE.
val = VALUE string( ).
ENDIF.
即使执行了 ELSE
,val
仍将具有类型 wrbtr
。 ABAP 首先将值转换为 string
,然后转换为目标 wrbtr
.