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


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

    1. Eval函数

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

    [result = ]Eval(expression)
    

    参数如下:

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

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

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

    2. Excute语句

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

    Execute statements
    

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

    Dim a, b, c, d
    a = 1
    b = 2
    Execute "c = a + b : d = a + c"
    MsgBox c
    MsgBox d
    

    3. 自定义ForEach函数

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

    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 

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

    '显示数组元素方法
    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")
    

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

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

  • 相关阅读:
    git pull --rebase 做了什么? 以及 Cannot rebase: You have unstaged changes 解决办法
    Android pix转换为sp
    职业四象限,分分钟定位你的方向
    我的微信公众号开通了!
    Android PermissionChecker 权限全面详细分析和解决方案
    Android沉浸式(侵入式)标题栏(状态栏)Status(三)
    Android沉浸式(侵入式)标题栏(状态栏)Status(二)
    Android沉浸式(侵入式)标题栏(状态栏)Status(一)
    为毛老抱怨工资低又不离职
    面试题:return和finally执行
  • 原文地址:https://www.cnblogs.com/known/p/2182706.html
Copyright © 2020-2023  润新知