2010-08-04 21 views
8

? Estoy tratando de escribir una función que puede devolver múltiples valores desde una función que tiene 2 argumentos.QTP: ¿Cómo puedo devolver múltiples valores desde una función

por ejemplo:

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 

Aquí esta función llamada sample_function tiene 2 argumento con nombre arg1, arg2. Cuando llamo a esta función en mi Driver Script como value = sample_function (2, Name_person), esta función debe devolverme los valores de passenger, name1, age1, seatNumber.

¿Cómo puedo lograrlo?

EDITAR (LB): QTP utiliza VBScript para especificar las rutinas de prueba, por lo que este reetiquetado de VBScript, VB porque la solución es probablemente dentro de VBScript.

Respuesta

1

Puede crear un nuevo tipo de datos y agregar todos los miembros necesarios en él. A continuación, devuelva este nuevo tipo de datos de su función.

23

Una solución sencilla sería la de devolver una matriz:

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

x=foo() 

MsgBox x(0) 
MsgBox x(1) 

Si usted usa el mismo lote de valores de más de una vez, entonces podría pagar para que sea una clase definida por el usuario:

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

En VBScript, todos los parámetros de función son parámetros de entrada/salida (también llamados parámetros ByRef). Para que pueda devolver sus datos simplemente usando los parámetros de la función. Ejemplo:

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

@Fmunkert: Estoy de acuerdo que esto también va a funcionar, pero esto no funciona cuando tenemos 2 argumentos y hay 3 tipos de retorno. @Luther: Gracias, esto funcionó para mí ..... – TestGeeK

-2
'============================================== 
' Date  : 09/21/2012 
' Created By : Jamil 
' VB Script Basic Sub Function and Function Test 
'============================================== 

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" 


'(1) simple calculater sub function with no return value 


Function funcMath1(val1, val2, opt) 
Dim result 

Select Case UCase(opt) 
    Case "M" 
     result = (val1 * val2) 
     Print "The result of multiplying is " &val1& " With " &val2& " is " &result 
    Case "S" 
     result = (val1 - val2) 
     Print "The result of subtraction is " &val1& " With " &val2& " is " & result 
    Case "D" 
     result = (val1/val2) 
     Print "The result of divide is " &val1& " With " &val2& " is " & result 
    Case "A" 
     result = (val1 + val2) 
     Print "The result of Addtion is " &val1& " With " &val2& " is " & result 
Case else 
     msgBox "Your option "& opt &" is invalid!" 
End Select 

End Function 



Print " " 
Print "Calling a function" 

call funcMath2(10, 25, "M") 
call funcMath2(10, 25, "S") 
call funcMath2(10, 25, "D") 
call funcMath2(10, 25, "A") 
call funcMath2(10, 25, "C") 

'(2) simple calculater function with return value 

Function funcMath2(val1, val2, opt) 
Dim result, returnValue 

Select Case UCase(opt) 
    Case "M" 
     result = (val1 * val2) 
     Print "The result of multiplying is " &val1& " With " &val2& " is " &result 
    Case "S" 
     result = (val1 - val2) 
     Print "The result of subtraction is " &val1& " With " &val2& " is " & result 
    Case "D" 
     result = (val1/val2) 
     Print "The result of divide is " &val1& " With " &val2& " is " & result 
    Case "A" 
     result = (val1 + val2) 
     Print "The result of Addtion is " &val1& " With " &val2& " is " & result 
Case else 
     msgBox "Your option "& opt &" is invalid!" 
End Select 

funcMath2 = result 

End Function 
+0

Como lo indica la "subfunción" de oxymeron y el uso de Call para ignorar los valores de retorno, este fragmento de código es un ejemplo peligroso de cómo no programar en VBScript. Además, no aborda la cuestión de devolver múltiples valores de una función. –

+1

¿Qué resultado? Las funciones no devuelven ningún resultado. Así que llamar no puede ser incorrecto en este caso ;-) – TheBlastOne

0

Esto le ayudará,

puede hacerlo en dos métodos primero uno es pasar todos los valores como un array por ejemplo

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 

El El segundo método es concatenar y dividir

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 
1

Puede hacerlo devolviendo el objeto del diccionario desde la función.

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 

aquí en el diccionario he añadido a nombres de clave de Msg1 y Msg2 de manera similar podemos añadir más teclas con tener valor de diferentes tipos como int, booleano, matriz de cualquier tipo de datos ..

-1
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

Hola, su publicación ha sido marcada como de "baja calidad", probablemente porque se compone únicamente de código. Podría mejorar masivamente su respuesta proporcionando una explicación de cómo y por qué esto responde la pregunta. – Ben

0

No tengo nada. Todo el mérito recae en el trabajo duro de mis amigos en línea pradeek y otro amigo. Espero que esto ayude a alguien.

'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 
1

declare su función así.

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 

entonces cuando lo llaman acaba de introducir las variables que desea devolver.

0

Mediante el uso de diccionario Object.This es su función

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) 

Ventaja de utilizar el diccionario de objetos es, en algún momento en la línea que desea la función para devolver más valores (y esta función es utilizado por muchos proyectos/equipos), tiene que hacer es agregar los valores que desea devolver en el objeto de diccionario, sin tener que agregar más parámetros (los que usan esta función no obtendrán ningún error)

0

Si está seguro de que el conjunto de list1 solo requiere datos de la misma manera que lo publicaste. A continuación, puede pasar directamente a la matriz de la función también: -

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

    passenger = list1(0) 
    name1 = list1(1) 
    age1 = list1(2) 
    seatNumber = list1(3) 
    sample_function list1  
end function 
Cuestiones relacionadas