Диапазон возможных входных значений в моем случае довольно велик. Таким образом, методология выбора не будет работать. Итак, на основе моего ввода говорят, что цветы .. doffodil, lily, rose и т. Д., Мое имя функции для вызова будет flowerdoffodil()
, flowerlily()
, flowerrose()
и т. Д. Ech этих функций уже определены. Только тот, который нужно вызвать, должен быть определен во время выполнения на основе моего ввода. Есть ли способ сделать это в скрипте vb? Примечание: я программист новичков и использую QTP для автоматизации.как определить во время выполнения, какую функцию вызывать в vbscript
0
A
ответ
5
Использование GetRef() как в:
Option Explicit
Function flowerdoffodil()
flowerdoffodil = "my name is daffodil!"
End Function
Function flowerlily()
flowerlily = "my name is lily!"
End Function
Function flowerrose()
flowerrose = "my name is rose!"
End Function
Dim aInp : aInp = Split("doffodil lily rose")
Dim sFnc
For Each sFnc In aInp
Dim fncX : Set fncX = GetRef("flower" & sFnc)
Dim sRes : sRes = fncX()
WScript.Echo sFnc, TypeName(fncX), sRes
Next
выход:
cscript 30161364.vbs
doffodil Object my name is daffodil!
lily Object my name is lily!
rose Object my name is rose!
Далее пища для размышлений: Вы можете использовать словарь:
Dim dicFncs : Set dicFncs = CreateObject("Scripting.Dictionary")
Set dicFncs("doffodil") = GetRef("flowerdoffodil")
Set dicFncs("lily") = GetRef("flowerlily")
Set dicFncs("rose") = GetRef("flowerrose")
и вызовите функцию (s) таких как:
Dim sRes : sRes = dicFncs(sFnc)()
Alternative будет использовать Eval & Co., который позволил бы избежать использования GetRef (не уверен, если это лучше, но это может быть легче понять концепцию " оценить эту строку ", чем понятие указателей функций/делегатов). – TheBlastOne