В VBScript я сталкиваюсь с чем-то странным. При написании процедуры, в которой я хочу, чтобы параметр передавался по ссылке, способ вызова этой процедуры изменяет способ передачи этого параметра!
Вот пример:
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
И вот вывод:
U:\>cscript //nologo byrefbyval.vbs
Num : 10
IncrementByRef(Num) : 10
IncrementByRef Num : 11
IncrementByVal(Num) : 11
IncrementByVal Num : 11
U:\>
При указании параметров передается ByVal, он работает как ожидалось, независимо от способа вызова процедуры. Но при указании параметров передается ByRef, он будет работать, как ожидалось, при вызове процедуры следующим образом:
IncrementByRef Num
но не таким образом:
IncrementByRef(Num)
Это кажется мне странным. Есть ли способ удостовериться, что параметры переданы ByRef, независимо от того, как вызывается процедура?