Type conversion ABAP中的条件类型
我们都知道这个奇特的新的伪三元运算符是COND:Type conversion ABAP中的条件类型,type-conversion,abap,conditional-operator,Type Conversion,Abap,Conditional Operator,我们都知道这个奇特的新的伪三元运算符是COND: COND #( WHEN 1 = 1 THEN something ELSE everything ). 然而,在最近的实践中,我注意到了返回变量类型的奇怪之处:它总是获取第一个然后是操作数的类型,这一点已经被 如果操作数类型不能完全识别,则必须在第一个之后指定具有静态识别类型的操作数(除非将构造函数参数传递给具有一般类型形式参数的实际参数)然后使用此类型。 在此示例中,val变量将始终具有压缩类型忽略数量的值 我们如何在这里实现条件输入?即W
COND #( WHEN 1 = 1 THEN something ELSE everything ).
然而,在最近的实践中,我注意到了返回变量类型的奇怪之处:它总是获取第一个然后是操作数的类型,这一点已经被
如果操作数类型不能完全识别,则必须在第一个之后指定具有静态识别类型的操作数(除非将构造函数参数传递给具有一般类型形式参数的实际参数)然后使用此类型。
在此示例中,val
变量将始终具有压缩类型忽略数量的值
我们如何在这里实现条件输入?即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
,即使执行了ELSE
。ABAP首先将值转换为字符串
,然后再转换为目标wrbtr
“条件输入”?但无论如何,变量必须具有在编译时定义的完整类型。它不能在运行时决定。这不依赖于COND或任何其他构造函数运算符。唯一真正的“条件类型”是RTTC(创建数据)。但是像我的例子中那样的内联声明完全允许完全类型化,唯一的问题是条件性,这是我无法实现的。我不明白您是想要“条件转换”还是“条件类型化”。根据ABAP的“哲学”,后者是不可能的。如果您想要条件转换,当然是可能的,但是您不能使用比您建议的代码更短的代码。如果你能提供一个“完整”的示例/代码,那么讨论起来就容易多了。但是你不能比你建议的代码短。
你是说最后一个带有If的代码?如果你能提供一个“完整”的例子/代码,那就更容易讨论了。
我前面提到的例子是将变量传递给接受任何类型参数的方法,所以我想动态构造我的类型。是的,我知道它不起作用。这个例子不是真实的例子,而是一个存根。
DATA quantity TYPE wrbtr.
DATA val TYPE wrbtr.
IF quantity NE '0.00'.
val = '3.12'.
ELSE.
val = VALUE string( ).
ENDIF.