2008-09-26 41 views
7

Tôi đang cố gắng trả về một từ điển từ một hàm. Tôi tin rằng chức năng này hoạt động chính xác, nhưng tôi không chắc cách sử dụng từ điển được trả về.VBScript: Làm thế nào để làm mất một đối tượng từ điển được trả về từ một hàm?

Dưới đây là phần có liên quan về chức năng của tôi:

Function GetSomeStuff() 
    ' 
    ' Get a recordset... 
    ' 

    Dim stuff 
    Set stuff = CreateObject("Scripting.Dictionary") 
    rs.MoveFirst 
    Do Until rs.EOF 
    stuff.Add rs.Fields("FieldA").Value, rs.Fields("FieldB").Value 
    rs.MoveNext 
    Loop 

    GetSomeStuff = stuff 
End Function 

Làm thế nào để gọi chức năng này và sử dụng từ điển trở lại?

EDIT: Tôi đã thử điều này:

Dim someStuff 
someStuff = GetSomeStuff 

Dim someStuff 
Set someStuff = GetSomeStuff 

Khi tôi cố gắng truy cập vào someStuff, tôi nhận được một lỗi:

Microsoft VBScript runtime error: Object required: 'GetSomeStuff' 

EDIT 2: Đang cố gắng chức năng này trong hàm:

Set GetSomeStuff = stuff 

Kết quả trong lỗi này:

Microsoft VBScript runtime error: Wrong number of arguments or invalid property assignment. 

Trả lời

22

Tôi không quá chắc chắn về vấn đề của bạn, vì vậy tôi đã thử nghiệm một chút.

Dường như bạn chỉ bỏ lỡ đó để gán một tham chiếu đến một đối tượng, bạn phải sử dụng set, ngay cả đối với một giá trị trả về:

Function GetSomeStuff 
    Dim stuff 
    Set stuff = CreateObject("Scripting.Dictionary") 
    stuff.Add "A", "Anaconda" 
    stuff.Add "B", "Boa" 
    stuff.Add "C", "Cobra" 

    Set GetSomeStuff = stuff 
End Function 

Set d = GetSomeStuff 
Wscript.Echo d.Item("A") 
Wscript.Echo d.Exists("B") 
items = d.Items 
For i = 0 To UBound(items) 
    Wscript.Echo items(i) 
Next 
+0

tôi nhớ da diết sự kết hợp của Set GetSOmeStuff = công cụ và Set d = GetSomeStuff. Cảm ơn! – aphoria

+0

@ user66001 Tôi không nghĩ rằng nên thử và chỉnh sửa mã (hoặc câu trả lời!) Của người khác (bên cạnh các công việc như sửa lỗi chính tả, cập nhật URL, v.v.), đặc biệt là đối với điểm nhỏ, đặc biệt là khi bạn sai ... Nếu bạn thay 'd' bằng tên hàm, bạn gọi hàm trên mỗi lần xuất hiện. Việc thiếu '()' có thể đã đánh lừa bạn để sử dụng một cuộc gọi hàm như một biến. Tôi không thấy thời điểm tạo cấu trúc 'nội dung' mỗi lần. Nó không quan trọng ở đây, cho bản demo đơn giản như vậy, nhưng nó có thể quan trọng trong một chương trình thực sự. – PhiLho

+0

@PhiLho - Sai lầm của tôi. Xin lỗi (Hãy nghĩ rằng nó không quan trọng về nguyên tắc, vì vậy xóa thông tin sai của tôi). – user66001

0

Các bạn đã thử:

Dim returnedStuff 
Set returnedStuff = GetSomeStuff() 

Sau đó, "Đối với mỗi" iterating trên từ điển? Có một ví dụ về cách sử dụng từ điển (mặc dù cho VB6, ý chính của nó là như nhau mặc dù!) here.

4

Bạn đã thử thực hiện
set GetSomeStuff = stuff
trong dòng cuối cùng của hàm?

Các vấn đề liên quan