主题:[讨论]Type( ) 和 VarType( )
moz
[专家分:37620] 发布于 2008-08-29 00:57:00
[quote]VARTYPE( ) 类似于 TYPE() 函数,但是 VARTYPE() 更快,而且表达式外面不需要引号。 [/quote]
[color=ff00ff]表达式外面不需要引号[/color]
这一句话说得有点奇怪,
应该说 VarType( ) 函数的参数是变量
而 Type( ) 函数的参数是字符串,也就是变量名
这样的解释是否会更贴切一点?
那是题外话,
现在要讨论的是不是有了更快的 VarType( ),就不再需要 Type( ) 了呢?
倒是想讨论一下它们之间的区别:
Type( ) 的参数是变量名,如果这个变量不存在,返回 U
VarType( ) 的参数是变量,如果这个变量还没有使用过,也是返回 U
但,Type( ) 不会检查你的变量名的合法性,而 VarType( ) 则会.
而且它们的区别还是有点用的.
例如: 在程序过程中创建了一个EXCEL对象,
引用了一个工作薄.(比如使用了对象名E_1来引用)
有必要的情况下,把它可视化了,
而在交互的过程中,这个工作薄被用户关闭了,
我们怎样在程序中检查这个工作薄是否被关闭了呢?
如果不去检查,后面的工作便变得危险了.
我们用这两个函数去检查一下:
Type("E_1") 返回O
VarType(E_1) 返回O
再来看看:
Type("E_1.name") 返回U
VarType(E_1.name) 出错
因为E_1的实例对象已经消失,已经再也没有.name这个属性了,
这样一看,便能发现,原来 Type( ) 还可以检查某个实例引用是否有效,
利用它的某个属性便可以了.
回复列表 (共9个回复)
沙发
cbl518 [专家分:57140] 发布于 2008-08-29 01:42:00
有了更快的 VarType( ),就不再需要 Type( ) 了呢?
从帮助文档中,说 VARTYPE() 速度快,但是经我测试基本区别不大!
但是如果以下的的方式:TYPE() 就比 VARTYPE() 速度快
c="序号字段"
?TYPE(c)
?VARTYPE(&c.)
板凳
cbl518 [专家分:57140] 发布于 2008-08-29 01:44:00
如果以下的的方式:VARTYPE() 不能实现。 初学者搞不好,容易误导!
当第一个字段是 N 型
? TYPE(FIELD(1)) 返回 N
如果错写成这样
? VARTYPE(FIELD(1)) 不提示错误,而是返回 C
而且 VARTYPE() 在某些环境中,有出错的现象!
3 楼
jinlonggao [专家分:17130] 发布于 2008-08-29 12:49:00
当打开表单"common.scx"时,用type('common')和 vartype(common)得到的返回值都是"O"
但当关闭表单后,用以上两个函数的返回值却分别是'O'和'X'
4 楼
cbl518 [专家分:57140] 发布于 2008-08-29 13:16:00
[quote]当打开表单"common.scx"时,用type('common')和 vartype(common)得到的返回值都是"O"
但当关闭表单后,用以上两个函数的返回值却分别是'O'和'X'
[/quote]
此时,type('common') 返回来的 O 是变量的数据类型
vartype(common) 返回来的 X 是变量的值
5 楼
jinlonggao [专家分:17130] 发布于 2008-08-29 17:35:00
"X"表示什么值?是空值吗?
6 楼
moz [专家分:37620] 发布于 2008-08-29 17:50:00
[quote]VARTYPE( ) 类似于 TYPE() 函数,但是 VARTYPE() 更快,而且表达式外面不需要引号。
VARTYPE(eExpression [, lNullDataType])
参数
eExpression
指定要返回数据类型的表达式。VARTYPE( ) 返回单个的字符,表明该表达式的数据类型。
下表列出了 VARTYPE( ) 返回的每种数据类型对应的字符
返回值 数据类型
C 字符型、备注型、可变长字符型(Varchar)、可变长字符(二进制)
D 日期型
G 通用型
L 逻辑型
N 数值型, 浮点型, 双精度型 或 整型
O 对象型
Q 大二进制对象(Blob)、可变长二进制型(Varbinary)
T 日期时间型
U 未知或变量不存在
X Null
Y 货币型[/quote]
空值正解
7 楼
jinlonggao [专家分:17130] 发布于 2008-08-30 14:33:00
谢冒子
8 楼
moz [专家分:37620] 发布于 2008-09-05 08:12:00
在Excel里,我们要检查工作簿里某一个表是否存在,
记得例程里是这样子教我们的:
for each S_name in EXCEL.WORKBOOKS(1).Sheets
if S_name.name="表名"
..................
endif
next
到了VFP,居然就可以用一个 TYPE( ) 来解决了.
if type('EXCEL.WORKBOOKS(1).Sheets("表名").name')="C"
9 楼
moz [专家分:37620] 发布于 2008-09-16 00:48:00
?TYPE("AT('A','ABC')")
?TYPE("AT(123,'ABC')")
感觉越来越恐怖了.
我来回复