2010-08-04 42 views
8

Tôi đang cố gắng viết một hàm có thể trả về nhiều giá trị từ một hàm có 2 đối số.QTP: Làm cách nào tôi có thể trả về nhiều Giá trị từ một hàm

ví dụ:

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 

Đây chức năng này được đặt tên sample_function có 2 tham số tên arg1, arg2. Khi tôi gọi hàm này trong Script điều khiển của tôi như value = sample_function (2, Name_person), hàm này sẽ trả về giá trị hành khách, name1, age1, seatNumber.

Làm cách nào tôi có thể đạt được điều này?

EDIT (LB): QTP sử dụng VBScript để chỉ định các thủ tục kiểm tra, vì vậy tôi đã gắn thẻ lại này với VBScript, VB vì giải pháp có thể nằm trong VBScript.

Trả lời

1

Bạn có thể tạo Kiểu dữ liệu mới và thêm tất cả các thành viên cần thiết vào đó. Sau đó trả về kiểu dữ liệu mới này từ hàm của bạn.

23

Một giải pháp đơn giản sẽ được trả về một mảng:

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

x=foo() 

MsgBox x(0) 
MsgBox x(1) 

Nếu bạn tình cờ sử dụng cùng một lô các giá trị thường nhiều hơn một lần, sau đó nó có thể trả tiền để làm cho nó một người sử dụng định nghĩa lớp:

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

Trong VBScript, tất cả tham số hàm là tham số đầu vào/đầu ra (còn được gọi là tham số ByRef). Vì vậy, bạn có thể trả về dữ liệu của bạn chỉ đơn giản bằng cách sử dụng các tham số chức năng. Ví dụ:

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: Tôi đồng ý rằng điều này cũng sẽ hoạt động, Nhưng điều này sẽ không hoạt động khi chúng tôi có 2 đối số và có 3 kiểu trả về. @Luther: Cảm ơn u, điều này làm việc cho tôi ..... – 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

Khi chức năng phụ "oxymeron" chỉ ra và việc sử dụng Gọi để bỏ qua giá trị trả lại được chứng minh, đoạn mã này là một ví dụ nguy hiểm về cách không lập trình VBScript. Hơn nữa nó không giải quyết câu hỏi trả về nhiều giá trị từ một hàm. –

+1

Kết quả là gì? Các hàm trả về không có kết quả nào cả. Vì vậy, cuộc gọi không thể sai trong trường hợp này ;-) – TheBlastOne

0

Điều này sẽ giúp bạn,

bạn có thể làm điều đó trong hai phương pháp đầu tiên là phải vượt qua tất cả các giá trị như mảng ví dụ

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 

Các Phương pháp thứ hai là ghép và tách

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

Bạn có thể làm điều đó bằng cách trả về đối tượng từ điển từ hàm.

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 

đây trong từ điển tôi đã thêm vào phím tên Msg1 và msg2 tương tự chúng ta có thể bổ sung thêm các phím với có giá trị của các loại khác nhau như int, Boolean, mảng bất kỳ loại dữ liệu ..

-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

Xin chào, bài đăng của bạn đã bị gắn cờ là "chất lượng kém", có thể vì nó chỉ bao gồm mã. Bạn có thể cải thiện một cách ồ ạt câu trả lời của mình bằng cách cung cấp giải thích chính xác cách thức và lý do giải thích câu hỏi này? – Ben

0

Tôi không có gì. Tất cả các tín dụng đi đến sự chăm chỉ của bạn bè trực tuyến của tôi pradeek và một người bạn khác. Tôi hi vọng điêu nay se giup được ai đo.

'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

khai báo chức năng của bạn như thế này.

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 

sau đó khi bạn gọi nó là chỉ đầu vào các biến bạn muốn quay trở lại.

0

Bằng việc sử dụng từ điển Object.This là chức năng của bạ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) 

Advantage của việc sử dụng đối tượng từ điển được, đôi khi xuống dòng bạn muốn hàm trả về nhiều giá trị (và chức năng này được sử dụng bởi nhiều dự án/đội), bạn phải làm là thêm các giá trị bạn muốn trả về trong đối tượng từ điển, mà không phải thêm nhiều tham số hơn (những người khác sử dụng chức năng này sẽ không nhận được lỗi nào)

0

Nếu bạn chắc chắn rằng chỉ cần list1 mảng dữ liệu theo cách tương tự như bạn đã đăng. Sau đó, bạn có thể trực tiếp truyền mảng từ hàm: -

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

    passenger = list1(0) 
    name1 = list1(1) 
    age1 = list1(2) 
    seatNumber = list1(3) 
    sample_function list1  
end function 
Các vấn đề liên quan