2015-05-11 1 views
0

Диапазон возможных входных значений в моем случае довольно велик. Таким образом, методология выбора не будет работать. Итак, на основе моего ввода говорят, что цветы .. doffodil, lily, rose и т. Д., Мое имя функции для вызова будет flowerdoffodil(), flowerlily(), flowerrose() и т. Д. Ech этих функций уже определены. Только тот, который нужно вызвать, должен быть определен во время выполнения на основе моего ввода. Есть ли способ сделать это в скрипте vb? Примечание: я программист новичков и использую QTP для автоматизации.как определить во время выполнения, какую функцию вызывать в vbscript

ответ

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)() 

(Смотри также: 1, 2, 3)

+1

Alternative будет использовать Eval & Co., который позволил бы избежать использования GetRef (не уверен, если это лучше, но это может быть легче понять концепцию " оценить эту строку ", чем понятие указателей функций/делегатов). – TheBlastOne