2010-10-27 106 views
6

我有一個表單數據的字典,我想使用函數進行修改。VBScript函數可以返回字典嗎?

function queryCleanForm(myDictForm) 

    dim arrayKeys 
    arrayKeys = myDictForm.keys 

    for i=0 to myDictForm.count-1 
     myDictForm(arrayKeys(i)) = replace(myDictForm(arrayKeys(i)), "'", "''") 
     response.write myDictForm(arrayKeys(i)) 
    next 

    queryCleanForm = myDictForm 
end function 

的問題是線queryCleanForm = myDictForm錯誤,

Wrong number of arguments or invalid property assignment 

有沒有辦法在VBScript中做到這一點?

+1

這個問題很類似於http://stackoverflow.com/questions/4038021/vba-return-dictionary-from-function在你自己的5分鐘前問。 – JohnFx 2010-10-27 22:06:25

+1

哇! (滿足最低字符要求) – quakkels 2010-10-27 22:15:44

回答

14

試試這個:

SET queryCleanForm = myDictForm 

有了對象,你需要使用SET告訴VBScript中,這是一個您正在分配的對象引用不是值類型。

+1

謝謝......現在痛苦地顯而易見:-) – quakkels 2010-10-27 22:15:00

1

是的,你需要使用SET命令:

設置queryCleanForm = myDictForm

0

您也可以使用函數中的ByRef或ByVal值。 ByVal,您發送給函數或子函數的對象被複制到私有存儲器中,以便在函數內部使用並在函數完成後丟棄。 ByRef,你發送給函數的對象被引用,並且你所做的所有操作,刪除鍵,設置對象等都直接完成了你發送的對象。

E.g.

Sub test 
    DIM testDict as variant 
    call setdict(testDict) 

    testDict.Add "test", "value" 

    call addValue(testDict, "test2","another value") 

    msgbox testDict.Count 

    Set testDict = Nothing 
End Sub 

Sub setdict(ByRef in_Dict as Variant) 
    If Typename(in_Dict) <> "Dictionary" Then 
    SET in_Dict = CreateObject("Scripting.Dictionary") 
    end if 
end sub 

sub addValue(ByRef in_Obj as Variant, ByVal in_Key as String, ByVal in_Value as String) 
if not in_Obj.Exists(in_Key) then 
    in_Obj.Add in_Key, in_Value 
end if 
end sub 

測試子調用子類型設置變量類型的變量。在函數中,我驗證發送給子的對象的類型。如果對象類型不是字典對象(它不是),那麼實際上是在子測試中聲明的testDict對象的in_Dict對象將被設置爲字典對象。

爲了更好地演示這個參考,我還加入了第二個子項addvalue。我將對象作爲引用再次傳遞給函數,並向字典對象添加另一個鍵。在主要測試中,子病人然後張貼計數。在這種情況下,存在2個鍵。

+0

這個問題已經有*年*前接受的答案... – alestanis 2012-10-28 19:17:32