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语义相同