回 帖 发 新 帖 刷新版面

主题:[讨论]Type( ) 和 VarType( )

[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个回复)

沙发


有了更快的 VarType( ),就不再需要 Type( ) 了呢?



从帮助文档中,说 VARTYPE() 速度快,但是经我测试基本区别不大! 

但是如果以下的的方式:TYPE() 就比 VARTYPE() 速度快

c="序号字段"
?TYPE(c)
?VARTYPE(&c.)

板凳

如果以下的的方式:VARTYPE() 不能实现。  初学者搞不好,容易误导!

当第一个字段是 N 型
? TYPE(FIELD(1)) 返回 N

如果错写成这样
? VARTYPE(FIELD(1)) 不提示错误,而是返回 C

而且 VARTYPE() 在某些环境中,有出错的现象!

3 楼

当打开表单"common.scx"时,用type('common')和 vartype(common)得到的返回值都是"O"
但当关闭表单后,用以上两个函数的返回值却分别是'O'和'X'

4 楼

[quote]当打开表单"common.scx"时,用type('common')和 vartype(common)得到的返回值都是"O"
但当关闭表单后,用以上两个函数的返回值却分别是'O'和'X'
[/quote]

此时,type('common')  返回来的 O 是变量的数据类型
vartype(common)       返回来的 X 是变量的值

5 楼

"X"表示什么值?是空值吗?

6 楼

[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 楼

谢冒子

8 楼

在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 楼

?TYPE("AT('A','ABC')")
?TYPE("AT(123,'ABC')")

感觉越来越恐怖了.

我来回复

您尚未登录,请登录后再回复。点此登录或注册