PowerBuilder还支持Any数据类型,它可以保存任何类型的值,包括标准数据类型、对象、结构和数组。一个类型为Any的变量,它的数据类型是可变的——这取决于赋给它的值。
声明any变量,就像声明其它变量一样。
使用标准的赋值语句为any变量赋值。你可以为一个数组赋值为一个any变量。也可以赋值一组any变量,这样,数组中的每个元素就拥有不同的数据类型。
当你为一个any变量赋值后,你可以使用ClassName函数测试该变量并找到实际的数据类型。
any la_spreadsheetdata
la_spreadsheetdata = ole_1.Object.cells(1,1).value
CHOOSE CASE ClassName(la_spreadsheetdata)
CASE "integer"
...
CASE "string"
...
END CHOOSE
这些规则适用于any的赋值:
如果一个any变量的值是一个数组,你只有为数组中的元素赋上一个正确数据类型,才能访问它。这限制不适用于相反的情况,即一数组的any变量——你可以访问数组中的每一个any变量。
如果一个any变量的值是一个结构,你不能使用点符号来访问结构中的元素,直到你为该元素赋上一个正确数据类型的结构变量。
如果一个值已经赋给any变量,它不能被转换回一个通用的没有具体数据类型的any变量。即使你将它set为NULL,它也保留了分配值的数据类型,直到你为它分配另一个值。
您可以在any变量上执行操作,只要any变量的数据类型适用于操作符。如果数据类型不适合操作符.将发生执行错误。
例如,如果实例变量ia_1和ia_2包含数字型数据,下列声明是有效的:
any la_3
la_3 = ia_1 - ia_2
如果ia_1和ia_2包含字符串,可以使用连接操作符:
any la_3
la_3 = ia_1 + ia_2
然而,如果ia_1包含一个数字和ia_2包含一个字符串,你会得到一个执行错误。
数据类型转换函数 PowerScript数据类型转换函数接受any变量作为参数。当你调用这个函数时,any变量必须包含数据,该数据可以转换为指定的类型。
例如,如果ia_any包含一个字符串,你可以为它赋上一个字符串变量:
ls_string = ia_any
如果ia_any包含一个数字,您想将其转换为一个字符串,你可以调用String函数:
ls_string =String(ia_any)
其他函数 如果一个函数的规范不允许any作为一个参数的数据类型,您就不能使用一个没经过转换的any变量,即使它包含一个正确的数据类型的值。当您编译脚本时,您将得到编译器报错,例如Unknown function or Function not found.
例如,Len函数的参数引用到数据窗口中一String列,但表达式中含一个any类型:
IF Len(dw_notes.Object.Notes[1])> 0 THEN/ /无效
下列执行成功,因为any表达式中的字符串值已经显式转换为一个string类型:
IF Len(String(dw_notes.Object.Notes[1]))> 0 THEN
表达式的数据类型是any
当脚本编译时,表达式访问类型未知的数据,它拥有一个any的数据类型。这些包含函数的表达式访问一个OLE对象或一个DW对象的数据:
myoleobject.application.cells(1,1).value
dw_1.Object.Data[1,1]
dw_1.Object.Data.empid[99]
表达式所指向的对象是可以改变的,因此所访问的数据类型也跟着变化。
引用DW数据的表达式可以返回包含数组、结构、结构的数组的any变量。 为获得最佳性能,您应该将数据窗口表达式分配给合适的数组或结构,而不是使用一个起媒介作用的any变量。
当你想在脚本中选择正确的数据类型时,不要使用any变量。有两个原因: