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

转载 2015年11月20日 00:31:18

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#中的其他很多特性,以后在编写测试代码过程中,要不断去总结。

VBS --函数Eval和Execute的使用和区别

一、Eval函数:定义为计算一个表达式的值并返回结果。  注意,这里的定义虽然区区几个字,但是要仔细理解其几点含义: 1、首先这个函数是有返回值 2、返回值是通过计算Eval传递的参数 3、这...
  • HYHOLINE
  • HYHOLINE
  • 2012年07月04日 17:48
  • 3133

array.foreach() 和 array.map() 的用法

foreach: foreach相当于for循环。***前:*** var items = ['item1', 'item2', 'item3']; var copy = [];for (var i...
  • m0_37359464
  • m0_37359464
  • 2017年08月08日 22:08
  • 83

eval使用说明

eval函数接收一个参数s,如果s不是字符串,则直接返回s。否则执行s语句。如果s语句执行结果是一个值,则返回此值,否则返回undefined。 需要特别注意的是对象声明语法“{}”并不能返回一个值...
  • Inuyasha1121
  • Inuyasha1121
  • 2015年06月04日 11:14
  • 558

vbscript 学习笔记

第三章 1.       建立列表 1.无序列表:列表项目作为一个整体,与上下文各有一段空白 格式为: ul和 li的属性:type=disc,circle,square ul 的属...
  • dananhai381
  • dananhai381
  • 2012年09月10日 11:27
  • 2955

Exec 与 eval 语句

一、什么是Exec语句假如我们一串字符串里面有Python代码,这个时候,普通情况是会把这串代码作为字符串来输出的,而不会执行这段代码。如果此时,我们想执行这串字符串里面的Python代码,使用Exe...
  • xsj_blog
  • xsj_blog
  • 2016年06月23日 23:18
  • 2082

Java版的实现JavaScript中的eval()函数

实现步骤:1.自定义一个Java类,该Java类中定义一个方法来包含需要被运行的代码。2.动态编译刚刚生成的Java源码,不在磁盘上生成源码,而是直接编译内存中的Java源码。3.动态加载刚刚创建编译...
  • leeyohn
  • leeyohn
  • 2010年01月12日 02:10
  • 3209

python的eval、exec函数使用总结

eval函数 一、函数的作用 将字符串str当成有效的表达式来求值并返回计算结果。它要执行的python代码只能是单个运算表达式(不支持任意形式的赋值操作),而不能是复杂的代码逻辑。   二、函数的定...
  • xiaoquantouer
  • xiaoquantouer
  • 2017年07月13日 12:11
  • 768

c++实现简单eval

2017 计蒜之道 初赛 第二场 百度的科学计算器(简单) 对于给定一个合法的字符串(可以含有整数、小数、加号、减号、括号)的字符串,计算其值...
  • u012476429
  • u012476429
  • 2017年05月22日 22:33
  • 615

10.4 eval函数和feval函数

1.eval函数 eval函数可以与文本变量一起使用,其具体语法形式:eval(s)该指令的功能为使用MATLAB的注释器求表达式的值或执行包含文本字符串s的语句。 s可为4种不同类型的语句字符串...
  • MATLAB_matlab
  • MATLAB_matlab
  • 2016年12月08日 20:11
  • 565

如何改写js中的eval函数?

js中有一个函数eval可以一段文本改为js代码,
  • xuexiaodong2009
  • xuexiaodong2009
  • 2014年09月22日 10:13
  • 1657
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:VBScript之Eval函数与Execute语句(Array.ForEach的实现)
举报原因:
原因补充:

(最多只允许输入30个字)