我正在尝试使用getref从与测试关联的函数库中调用函数。 我的代码 -
在行动1
str = "sample"
msg = "hi"
x = GetRef("Function_"&str)(msg)
msgbox x
在函数库中,
Function Function_sample(strMsg)
Function_sample = strMsg
End Function
我收到了错误 -
“无效的过程调用或参数。”
但是如果函数放在同一个动作中,它可以正常工作。 如何调用函数库中的函数(带参数),从变量中获取函数名称?
答案 0 :(得分:5)
简约工作示例:
<强> Lib.vbs:强>
Option Explicit
Function Twice(n)
Twice = n + n
End Function
<强> Main.vbs:强>
Option Explicit
Dim goFS : Set goFS = CreateObject("Scripting.FileSystemObject")
ExecuteGlobal goFS.OpenTextFile(".\lib.vbs").ReadAll()
Dim fpTwice : Set fpTwice = GetRef("Twice")
WScript.Echo fpTwice(42)
<强>输出:强>
cscript main.vbs
84
错误消息“...运行时错误:无效的过程调用或参数:'GetRef'”表示(导入)函数库是责备。
<强>更新强>
我认为假设VBScript引擎保留一个表,将子/函数/方法名称与可调用代码相关联,以便能够进行文字/直接调用,这是合理的:
n = Twice(11)
并且GetRef(“Twice”)访问此表。因此,当文字调用成功时,我永远不会期望间接/'函数指针'调用或GetRef()失败。
但根据this和that,至少有四种方法可以将库/模块“导入”QTP,而则因为我不使用QTP I不能排除,这些方法中的一些(甚至全部)做了一些愚蠢的事情来导致你描述的错误行为。
答案 1 :(得分:2)
我遇到了同样的issue,发现关联或加载功能库并不适用于trenutnoStanjeTB.Text = !String.IsNullOrWhiteSpace(f2.Passvalue) ? f2.Passvalue : trenutnoStanjeTB.Text;
DinEuLab1.Text = !String.IsNullOrWhiteSpace(f2.Passvalue2) ? f2.Passvalue2 : DinEuLab1.Text;
。要解决此问题,您只需要关联或加载FL,而不是使用#!/bin/bash
declare -a namesArray=("name1","name2","name3")
inserts=""
for i in "{arr[@]}"
do
inserts+="INSERT INTO persons(id, name) VALUES (0,'$i');"
done
echo $inserts | dbaccess yourDataBase
函数执行它。
在行动1
GetRef