[请教]vbscript是否有类似于js里eval的函数或支持类似的功能?

themedy 2005-04-05 10:40:32
希望将某个对象或函数的名称以字符串的形式传递过去,然后可动态执行。

例如,已有1个函数:
function func_abc(a,b,c)
...
end function

现在在另一处以字符串形式传递,

a = "func_abc"
if a <> "" then
执行(a)
end if

能实现吗?
...全文
145 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
smalle 2005-04-05
  • 打赏
  • 举报
回复
execute(expression)
hhjjhjhj 2005-04-05
  • 打赏
  • 举报
回复
Microsoft(R) Visual Basic(R) Scripting Edition
Eval 函数
------------------------------------------------------------------

描述
计算一个表达式的值并返回结果。
语法
[result = ]Eval(expression)
Eval 函数的语法中包含下面几部分:

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


说明
在 VBScript 中,x = y 可以有两种解释。第一种方式是赋值语句,将 y 的值赋予 x。第二种解释是测试 x 和 y 是否相等。如果相等,result 为 True;否则 result 为 False。Eval 方法总是采用第二种解释,而 Execute 语句总是采用第一种。
注意 在Microsoft(R) JScript 中不存在这种比较与赋值的混淆,因为赋值运算符(=)与比较运算符 (==)不同。

下面的例子说明了 Eval 函数的用法:

Sub GuessANumber
Dim Guess, RndNum
RndNum = Int((100) * Rnd(1) + 1)
Guess = CInt(InputBox("Enter your guess:",,0))
Do
If Eval("Guess = RndNum") Then
MsgBox "祝贺你!猜对了!"
Exit Sub
Else
Guess = CInt(InputBox("对不起,请再试一次",,0))
End If
Loop Until Guess = 0
End Sub

========================================================================

Microsoft(R) Visual Basic(R) Scripting Edition
Execute 语句
----------------------------------------------------------------

描述
执行一个或多个指定的语句。
语法
Execute statements

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

说明
在 VBScript 中,x = y 可以有两种解释。首先是作为赋值语句,将 y 的值赋予 x。其次是作为表达式,测试x 和 y 的值是否相等。如果相等,结果为 True;否则,结果为 False。Execute 语句总是使用第一种解释,而 Eval 方法总是使用第二种。
注意 在 Microsoft(R) JScript 中并不存在赋值与比较之间的混淆,因为赋值运算符(=)与比较运算符(==)是不同的。

调用 Execute 语句的上下文确定了要运行的代码可以使用的对象和变量。作用域内的对象和变量是 Execute 语句中运行的代码可以使用的。不过,必须明白的一点是,如果被执行的代码创建了过程,那么该过程将不会继承它所在的过程的作用域。

与其他过程类似,新的过程的作用域是全局的,它继承了全局作用域的全部东西。与其他过程不同的是,它的上下文不是全局作用域,因此它只能在发生 Execute 语句的过程内的上下文中执行。不过,如果相同的 Execute 语句是在过程之外(例如在全局作用域)的作用域中被调用,那么它将不仅继承全局作用域中的所有东西,而且它还可以在任何地方被调用,因为它的上下文是全局的。下面的例子说明了这种特点:


Dim X ' 在全局作用域中声明 X。
X = "Global" ' 将全局的 X 赋值。
Sub Proc1 ' 声明过程。
Dim X ' 在局部作用域中声明 X。
X = "Local" ' 对局部的 X 赋值。
' 此处的 Execute 语句建立了一个过程,
' 在调用该过程时它将打印 X。
' 它打印的将是全局 X,因为 Proc2
' 继承了全局作用域中的一切。
Execute "Sub Proc2: Print X: End Sub"
Print Eval("X") ' 打印本地 X。
Proc2 ' 在 Proc1 的作用域中调用 Proc2。
End Sub
Proc2 ' 本行将导致一个错误,因为
' Proc2 在 Proc1 之外是不可使用的。
Proc1 ' 调用 Proc1。
Execute "Sub Proc2: Print X: End Sub"
Proc2 ' 这句话可以成功,因为 Proc2
' 现在是全局可用的。

下面的例子显示了如何将 Execute 语句改写,免于将整个过程包含在引号内:

S = "Sub Proc2" & vbCrLf
S = S & " Print X" & vbCrLf
S = S & "End Sub"
Execute S
hbhbhbhbhb1021 2005-04-05
  • 打赏
  • 举报
回复
cstr()
themedy 2005-04-05
  • 打赏
  • 举报
回复
顶上来
themedy 2005-04-05
  • 打赏
  • 举报
回复
OK,搞掂

28,406

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧