2011-09-08 30 views
3

當您調用類似x = myfunc(a,b,,d)的函數時,第三個參數會發生什麼?它是空的嗎?空值?沒有?如何處理函數調用中的空參數?

我有我的功能,比方說問題,

function myfunc(p1, p2, p3, p4) 
    if p3 <> "" then whatever 
end function 

給了我一個可怕的type mismatch

附:我試圖用vbscript函數替換一個COM對象,並且這些空的參數調用已經完成了對這些沒有問題的COM對象,但是vbscript不喜歡它們。我不能改變電話,只有功能,所以我需要以某種方式對待空參數,只是不知道如何(試過isnull沒有運氣,也isempty沒有運氣,is nothing給我一個object required錯誤)

回答

6

缺失參數的數據類型爲ERROR。
我寫了一個例子,請嘗試以下操作:

Function IsMissing(p) 
    IsMissing = (VarType(p) = vbError) 
End Function 

Function Myfunc(p1, p2, p3, p4) 
    If IsMissing(p1) Then Response.Write "p1 is missing " 
    If IsMissing(p2) Then Response.Write "p2 is missing " 
    If IsMissing(p3) Then Response.Write "p3 is missing " 
    If IsMissing(p4) Then Response.Write "p4 is missing " 
End Function 

str = myfunc(, , , 1) 
'str = myfunc(1, 2, ,) 'causes error 

注意:的函數的最後一個參數/子不能因爲語法錯誤的空白。

+1

+1爲準確答案...但恕我直接寫'= vbError'的包裝函數是有點超過頂部! –

0

VBScript不支持可選參數。可以通過傳遞數組或空值來模擬它們,這對您的情況沒有幫助,因爲您無法更改調用。下一個解決方案可能是考慮更換平臺(我可以建議.Net)還是下面的錯誤恢復下一步攻擊。

'Assuming a String Parameter 
Dim strOptionalParameter As String 
strOptionalParameter = p3 

'We set the value of the optional parameter to a variable 
'in case it blows up and moves on to this next statement. 
If strOptionalParameter <> "" Then 
'Rest of Code Here 
End If 
2

在一個人教魚的精神:

TypeName功能會向你透露它是什麼類型。

MsgBox TypeName(p3) ' Returns string: "Error" 

而不是if p3 <> ""可以測試被省略參數是這樣的:

If TypeName(p3) = "Error" Then MsgBox "Whatever!" 

,或最好,

If VarType(p) = vbError Then MsgBox "Whatever!" 
    ' vbError is a built-in constant whose value is 10. 

但實際上,最佳實踐,你的程序設計中應避免遺漏參數。 VBScript並沒有真正處理「可選」參數。

+0

不錯,謝謝你的上學。我以前認爲這隻能用一個涉及On Error Resume Next的黑客來完成。 – N0Alias

相關問題