ABAP--新语法--New Keyword in ABAP--第六天--IPOW预定义函数 / IS INSTANCE OF / CASE TYPE OF

IPOW预定义函数

… ipow( base = arg exp = n ) …

它用于求arg的n次幂,arg和n都为数字表达式。arg可以为任意数值类型,n为可以为i类型的数据或可以转换为i类型的其它数据类型。如果arg的值为0,则n必须大于或等于0。
它的返回类型可以有多种类型:
 如果它用于非数学表达式,它的返回类型由arg的类型决定。
 如果它用于数学表达式,它先将arg转化为整个数据表达式的类型,再用转换后的结果进行计算。
 如果arg是一个数字表达式,ipow与运算符一样计算表达式的结果。
 注意
 ipow可以替代arg ** n,如果arg的类型不为f,如果是f类型,它会导致计算结果更加精确。
 在很多情况下,ipow比操作符“**”拥有更好的效率。
在这里插入图片描述

IS INSTANCE OF

… oref IS [NOT] INSTANCE OF class|intf

判断表达式IS INSTANCE OF的检查如下:
 是否非空对象引用变量oref的动态类型更加特殊或等于比较类型
 是否空对象引用变量oref的静态类型更加特殊或等于比较类型

比较的类型必须是对象类型,也就是说用class指定的类或用intf指定的接口可以在这儿使用。oref是一个静态类型为类或接口的对象引用变量。oref是一个和般表达式位置

在以下情况时,表达式的值为true,或使用NOT时为false:

  • 对象引用变量oref不为空,并且指向一个对象,这个对象对应的类满足以下条件:

      指定类class时,对象oref为class类型或它的子类类型
      指定接口intf时,对象oref为实现接口intf的类类型
    
  • 对象引用变量oref为空,它的静态类型满足以下条件:

      为class类型或它的子类类
      包含接口intf作为一个组件
    

在这里插入图片描述
在这里插入图片描述
结合概念逐个的分析,这个例子
Cls1类型为一个普通的对象类型,intf为类cls里面的一个公共方法,通过IS INSTANCE OF做比较,返回表达式false.

Cls2为实例化的一个cls类的对象,根据概念“指定接口intf时,对象oref为实现接口intf的类类型,返回值为true”,对象cls2为实现接口的类cls的实例化类型,所以返回值为true.

Cls3为接口intf的一个直接引用变量,满足“包含接口intf作为一个组件”,所以返回值为true

Cls4为类cls的一个引用变量,为实现接口intf的类的类型,所以返回值为true

Case type of

CASE TYPE OF oref
[WHEN TYPE class|intf [INTO target1].
[statement_block1]]
[WHEN TYPE class|intf [INTO target2].
[statement_block2]]

[WHEN OTHERS.
[statement_blockn]]
ENDCASE.

对象引用变量的特殊分支语句。它检查非空数据引用变量oref的动态类型及和空数据引用变量oref的静态类型。oref是一个静态类型为类或接口的引用变量,它是一个一般表达式位置

类class或接口intf必须在WHEN TYPE后面指定。类class或接口intf比较以下更通用时,对应的语句块statement_block会执行:
• 非空数据引用变量oref的动态类型
• 空数据引用变量oref的静态类型

如果没有任何一个WHEN TYPE分支被执行,则WHEN OTHERS后面的语句块statement_block会执行。

●注意
1、分支语句CASE TYPE OF与IF与IS INSTANCE OF的组合语句相同。以上语法等同于以下语法:

IF oref IS INSTANCE OF class|intf.
[statement_block1]
ELSEIF oref IS INSTANCE OF class|intf. [statement_block2] …
ELSE.
[statement_blockn]
ENDIF.

2、这个控制结构必须在前面指定更特殊的类或接口、在后面指定更通用的类或接口以确保相关的语句块执行

●示例
在这里插入图片描述

例子分析,首先定义了一个c1的类,然后由c2继承c1,c3继承c2,c2为c1的子类,c3为c2的子类,oref为c2实例化的一个对象

CASE TYPE OF oref
WHEN TYPE c3
实际上就相当于 oref IS INSTANCE OF c3的一个用法
而WHEN TYPE C2
Ref2 ? = oref
也与
WHEN TYPE c2 INTO ref2语义相同

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值