type-conversion - ABAP 中的条件输入
问题描述
我们都知道这个花哨的新伪三元运算符为 COND:
COND #( WHEN 1 = 1 THEN something ELSE everything ).
然而,最近在实践过程中,我注意到返回变量的类型很奇怪:它总是获取第一个 THEN 操作数的类型,这已由ABAP 帮助确认。
如果操作数类型不是完全可识别的,则必须在第一个 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.
解决方案
ABAP 中没有条件输入。作为一种完全类型化的语言,每个变量在编译时都需要一个明确的类型。
顺便说一句,您提供的示例不起作用:
DATA quantity TYPE wrbtr.
DATA val TYPE wrbtr.
IF quantity NE '0.00'.
val = '3.12'.
ELSE.
val = VALUE string( ).
ENDIF.
val
wrbtr
即使执行了,仍然会有 type ELSE
。ABAP 首先将值转换为string
,然后再转换为目标wrbtr
。
推荐阅读
- asp.net - 如何使用 SQL 在 ASP.NET 中选择值
- angular - 调查 js 中矩阵日期选择器类型的自定义小部件
- makefile - 即使底层文件没有改变,make也会运行命令
- c - c语言中printf命令的语法错误
- python - 在networkx中添加虚拟节点以限制度数的更快方法
- rust - 为什么我不能在 QEMU 中启动自定义内核?
- assembly - 尝试在 Assembly 8086 32bit 中显示 32 位数字
- firebase - Provider 包的参数 Listen : False 不起作用?扑
- javascript - 是否可以在 JS switch 语句中使用 !(not) ?
- amazon-web-services - 创建一个空的 cdk 管道来部署任何 lambda 代码