Tôi đang đối mặt với điều gì đó lạ trong VBScript. Khi viết một thủ tục mà tôi muốn tham số được chuyển qua tham chiếu, cách gọi thủ tục này thay đổi cách thông số được truyền!ByRef và ByVal trong VBScript
Dưới đây là một ví dụ:
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
Và đây là kết quả:
U:\>cscript //nologo byrefbyval.vbs
Num : 10
IncrementByRef(Num) : 10
IncrementByRef Num : 11
IncrementByVal(Num) : 11
IncrementByVal Num : 11
U:\>
Khi xác định các thông số được truyền ByVal, nó hoạt động như mong đợi, bất kể đường đi thủ tục là gọi là. Nhưng khi xác định các thông số được thông qua ByRef, nó sẽ làm việc như mong đợi nếu gọi các thủ tục theo cách này:
IncrementByRef Num
nhưng không phải theo cách này:
IncrementByRef(Num)
Điều này có vẻ lạ với tôi. Có cách nào để đảm bảo các tham số được truyền qua ByRef, không cần biết thủ tục được gọi như thế nào?
... Vì vậy, đơn giản? Và tôi đã được strugling cho nó cho một giờ! Cảm ơn, +1. – Jet