Mam do czynienia z czymś dziwnym w VBScript. Podczas pisania procedury, w której chcę, aby parametr był przekazywany przez odniesienie, sposób wywoływania tej procedury zmienia sposób przekazywania parametru!ByRef i ByVal w VBScript
Oto przykład:
Sub IncrementByRef(ByRef Value)
Value = Value + 1
End Sub
Sub IncrementByVal(ByVal Value)
Value = Value + 1
End Sub
Dim Num
Num = 10
WScript.Echo "Num : " & Num
IncrementByRef(Num) : WScript.Echo "IncrementByRef(Num) : " & Num
IncrementByRef Num : WScript.Echo "IncrementByRef Num : " & Num
IncrementByVal(Num) : WScript.Echo "IncrementByVal(Num) : " & Num
IncrementByVal Num : WScript.Echo "IncrementByVal Num : " & Num
I tu jest wyjście:
U:\>cscript //nologo byrefbyval.vbs
Num : 10
IncrementByRef(Num) : 10
IncrementByRef Num : 11
IncrementByVal(Num) : 11
IncrementByVal Num : 11
U:\>
Po określeniu parametrów przekazywanych ByVal, to działa zgodnie z oczekiwaniami, bez względu na sposób procedura jest nazywa. Ale kiedy określający parametry są przekazywane ByRef, to będzie działać zgodnie z oczekiwaniami, jeśli wywołanie procedura w ten sposób:
IncrementByRef Num
ale nie w ten sposób:
IncrementByRef(Num)
To wydaje mi się dziwne. Czy istnieje sposób, aby upewnić się, że parametry są przekazywane ByRef, bez względu na sposób wywołania procedury?
... Tak prosty? I walczyłem o to przez godzinę! Dzięki, +1. – Jet