Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Type conversion ABAP中的条件类型_Type Conversion_Abap_Conditional Operator - Fatal编程技术网

Type conversion ABAP中的条件类型

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:

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.