VBScript之Eval函数与Execute语句(Array.ForEach的实现)

VBScript之Eval函数与Execute语句(Array.ForEach的实现)

每当使用C#中的Array.ForEach时,感觉很爽。最近在做QTP自动化测试时,偶然在QTP自带示例中看到一段代码可以动态调用方法,于是先喜若狂,着手改编了一下,写了一个VBScript版的Array.ForEach功能,使用起来确实不错。其实关键的一个地方就在于使用了VBScript中的Eval函数。首先我们来看看Eval函数的作用。

1. Eval函数

Eval函数主要是计算一个表达式的值并返回结果。其签名如下:

1
[result = ]Eval(expression)

参数如下:

  • result:可选项。是一个变量,用于接受返回的结果。如果未指定结果,应考虑使用Execute语句代替。
  • expression:必选项。可以是包含任何有效VBScript表达式的字符串。

在VBScript中,x = y可以有两种解释。第一种方式是赋值语句,将y的值赋予x。第二种解释是测试x和y是否相等。如果相等,result为True;否则result为False。Eval方法总是采用第二种解释,而Execute语句总是采用第一种。下面是Eval函数的简单示例:

1
2
3
4
Dim a, b
a = 1
b = 2
MsgBox Eval( "a + b" )

2. Excute语句

执行一个或多个指定的语句。其签名如下:

1
Execute statements

所需要的statements参数是一个字符串表达式,其中包含一个或多个要执行的语句。如果要在statements参数中包含多条语句,应使用冒号或嵌入的分行将其分隔开。下面是Execute语句的简单示例:

1
2
3
4
5
6
Dim a, b, c, d
a = 1
b = 2
Execute "c = a + b : d = a + c"
MsgBox c
MsgBox d

3. 自定义ForEach函数

ForEach函数有两个参数,一个是数组变量,一个是遍历方法名称。其实现代码如下:

1
2
3
4
5
6
7
8
9
10
11
Sub ForEach(source, method)
     Dim i, current
     For i = 0 To UBound(source)
         If IsObject(source(i)) Then '判断数组元素是否为对象
             Set current = source(i)
         Else
             current = source(i)
         End If
         Eval(method & "(current)" ) '调用遍历方法
     Next
End Sub 

遍历一个整数数组的示例:

1
2
3
4
5
6
7
8
9
10
11
12
'显示数组元素方法
Function ShowValue(val)
     MsgBox val
End Function
 
Dim i, arr(10)
'给数组元素赋值
For i = 0 To 10
     arr(i) = i
Next
'调用ForEach遍历
Call ForEach(arr, "ShowValue" )

遍历一个对象数组的示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
'用户类
Class User
     '用户属性
     Public UserName, Email
 
     'ToString方法
     Function ToString()
         ToString = Me .UserName & " : " & Me .Email
     End Function
End Class
 
'显示用户信息方法
Function ShowUser(usr)
     MsgBox usr.ToString()
End Function
 
Dim arr(5), u
'给数组元素赋值
For i = 0 To 5
     Set u = New User
     u.UserName = "user" & CStr (i)
     u.Email    = "user" & CStr (i) & "@xxx.com"
     Set arr(i) = u
Next
'调用ForEach遍历
Call ForEach(arr, "ShowUser" )

看代码很简洁,不是嘛,原来VBScript也可以像C#一样使用ForEach。VBScript应该还能够实现C#中的其他很多特性,以后在编写测试代码过程中,要不断去总结。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值