QTP: Как я могу вернуть несколько значений из функции - PullRequest
9 голосов
/ 04 августа 2010

Я пытаюсь написать функцию, которая может возвращать несколько значений из функции, имеющей 2 аргумента.

Например:

function sample_function(arg1,arg2)
    ''#Some code.................

    passenger = list1(0)
    name1 = list1(1)
    age1 = list1(2)
    seatNumber = list1(3)
    ''#This is an Incomplete function...    
end function sample_function

Здесь эта функция с именем sample_function имеет 2 аргумента с именем arg1, arg2. Когда я вызываю эту функцию в моем скрипте драйвера, например value = sample_function (2, Name_person), эта функция должна возвращать мне значения passenger, name1, age1, seatNumber.

Как мне этого добиться?

РЕДАКТИРОВАТЬ (LB): QTP использует VBScript для указания процедур тестирования, поэтому я переназначил это VBScript, VB, потому что решение, вероятно, находится в VBScript.

Ответы [ 11 ]

23 голосов
/ 04 августа 2010

Простым решением было бы вернуть массив:

function foo()
 foo=array("Hello","World")
end function

x=foo()

MsgBox x(0)
MsgBox x(1)

Если вам случается использовать один и тот же пакет значений чаще, чем один раз, то может быть полезно сделать его определяемым пользователем классом:

class User
 public name
 public seat
end class 

function bar()
 dim r 
 set r = new User
 r.name="J.R.User"
 r.seat="10"
 set bar=r
end function

set x=bar()

MsgBox x.name
MsgBox x.seat
3 голосов
/ 04 августа 2010

В VBScript все параметры функции являются параметрами ввода / вывода (также называемыми параметрами ByRef).Таким образом, вы можете вернуть свои данные, просто используя параметры функции.Пример:

Function Test(a, b, c)
   a = 1
   b = 2
   c = 3
End Function

Test x, y, z
MsgBox x  ' Shows 1
MsgBox y  ' Shows 2
MsgBox z  ' Shows 3
1 голос
/ 18 апреля 2015

объявите вашу функцию следующим образом.

function sample (arg1, arg2, passenger, name, age1, seatNumber)
''#Some code.................
passenger = list1(0)
name1 = list1(1)
age1 = list1(2)
seatNumber = list1(3)
''#This is an Incomplete function...
end function sample

затем, когда вы вызываете ее, просто введите переменные, которые вы хотите вернуть.

1 голос
/ 08 сентября 2013

Вы можете сделать это, возвращая объект словаря из функции.

set dictFunRetun=foo()
msgbox dictFunRetun.item("Msg1")
msgbox dictFunRetun.item("Msg2")
function foo()
    set fnReturn=CreateObject("Scripting.Dictionary")
    fnReturn.Add "Msg1","First Variable"
    fnReturn.Add "Msg2","Second Variable"
    set foo=fnReturn
end function

здесь, в словаре, я добавил к ключам с именами Msg1 и Msg2 аналогично, мы можем добавить больше ключей, имеющих значения различных типов, таких как int, Boolean, массив данных любого типа ..

1 голос
/ 04 августа 2010

Вы можете создать новый тип данных и добавить в него всех необходимых членов. Затем верните этот новый тип данных из вашей функции.

0 голосов
/ 06 октября 2017

Если вы уверены, что массив list1 содержит только необходимые данные так же, как вы разместили. Тогда вы также можете напрямую передать массив из функции: -

function sample_function(arg1,arg2)
    ''#Some code.................

    passenger = list1(0)
    name1 = list1(1)
    age1 = list1(2)
    seatNumber = list1(3)
    sample_function list1    
end function 
0 голосов
/ 28 ноября 2016

Используя словарь Object.Это ваша функция

Function sample_function(ByRef passengerDetails)
    ''#Some code.................
    passengerDetails("passenger")=list(0)
    passengerDetails("name")=list(1)
    passengerDetails("age")=list(2)
    passengerDetails("seatnumber")=list(3)
    '#This is an Incomplete function...    
end function
'Creating a dictionary object
Set passengerDetails= CreateObject("Scripting.Dictionary")
'calling your function
sample_function(passengerDetails)

Преимущество использования словарного объекта заключается в том, что когда-нибудь вниз по строке вы хотите, чтобы функция возвращала больше значений (и эта функция используется во многих проектах /команды), вам нужно добавить значения, которые вы хотите вернуть, в объект словаря, без добавления дополнительных параметров (другие, использующие эту функцию, не получат никакой ошибки)

0 голосов
/ 07 октября 2014

У меня ничего нет. Все заслуги идут на тяжелую работу моих онлайн-друзей Pradeek и другого друга. Надеюсь, это кому-нибудь поможет.

'Passing multiple numerical values from one function to another method-1

Function fnFirstFunction()
    value1=1
    value2=2
    value3=3
    A=Array(value1,value2,value3)
    fnFirstFunction=A
    'msgboxA(0)
    'msgboxA(1)
End Function

'Belowfunction passes the value returned from the fnFirstFunction and displays
Function fnSecondFunction(ByVal  A)
    P=A
    B=P(0)
    MsgBox B
    C=P(1)
    Msgbox C
    D=P(2)
    Msgbox D
End Function

A=fnFirstFunction()
'AsfnFirstFunction returns a value, take it to a variable
Call fnSecondFunction(A)'a

'passing multiple character values from one function to another method -2
public function fun1()

    msg1="Hello How are you?"
    msg2="i am fine"
    msg3="Hope you doing fine"

    arr1=Array(msg1,msg2,msg3)
    fun1=arr1
End function

arr1=fun1()
Call fun2(arr1)

public function fun2(byval arr1)
    j=arr1
    usermessage1=j(0)
    msgbox usermessage1
    usermessage2=j(1)
    msgbox usermessage2
    usermessage3=j(2)
    msgbox usermessage3
End Function

'Passing multiple values from one function to another method-3
public function fun1()
    msg1="Hello How are you?"
    msg2="i am fine"
    msg3="Hope you doing fine"
    arr1=msg1 + "@" + msg2 + "@" + msg3
    fun1=arr1
End function

arr1=fun1()
Call fun2(arr1)

public function fun2(byval arr1)
    j=arr1
    k= split(j,"@")
    usermessage1=k(0)
    msgbox usermessage1
    usermessage2=k(1)
    msgbox usermessage2
    usermessage3=k(2)
    msgbox usermessage3
End Function
0 голосов
/ 17 сентября 2013
Option Explicit

Dim val1, val2
Dim res1, res2, res3, res4

Print "Calling a Sub function"

funcMath1 10, 25, "m"
funcMath1 10, 25, "S"
funcMath1 10, 25, "D"
funcMath1 10, 25, "A"
funcMath1 10, 25, "C"
0 голосов
/ 21 июля 2013

Это поможет вам,

вы можете сделать это двумя способами. Первый - передать все значения в виде массива, например:

function message

message1="Hello How are you?"

message2="i am fine"

message3="Hope you doing fine"

message=Array(message1,message2,message3)

End function

function chat-history

user-history=message

usermessage1=user-history(0)

usermessage2=user-history(1)

usermessage3=user-history(2)

End Function

Второй метод - объединить и разделить

function message

message1="Hello How are you?"

message2="i am fine"

message3="Hope you doing fine"

message=message1+"@"+message2+"@"+message3

End function

function chat-history

user-history=message

user-message=split(user-history,"@")

usermessage1=user-message(0)

usermessage2=user-message(1)

usermessage3=user-message(2)

End Function
...