PB中的any数据类型

Any数据类型

概述

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变量。

如果一个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数据类型

当你想在脚本中选择正确的数据类型时,不要使用any变量。有两个原因:

  • 在执行时,使用any变量是缓慢的。 PowerBuilder在执行一个涉及any变量的赋值或操作前,必须做更多处理以确定数据类型。特别是,如果你使用any类型而不是确定类型的变量,在一个循环中多次执行一个操作会消耗大量资源。
  • 在编译时,使用any变量不会检查你的编码错误。 PowerBuilder编译器在代码执行前会确保数据类型正确。使用any变量,编译器只能在代码跑起来才会抓到。

(注脚:翻译自PowerBuilder Help)
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值