我想知道这是否是正确的方法。 我有这个代表用户操作的示例代码,以及在函数中完成的计算,这个函数应该将值返回给我的子?
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim i As Integer = 1
Test_function(i)
MsgBox(i)
End Sub
Private Function Test_function(ByVal i As Integer)
i = i + 1
Return (i)
End Function
当我运行这段代码时,我得到了:
i = 1 in sub
i = 2 in function
i = 1 in sub?
你怎么把i = 2变成我的子?或者这不是使用它的正确方法吗?
答案 0 :(得分:4)
我认为您所问的是为什么i
不会因调用Test_function而改变。
让我们分解您的代码。
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim i As Integer = 1 'creating a variable named i, value 1.
Test_function(i) 'passing the value of the variable i to test function, but not doing anything with what the function returns.
MsgBox(i) 'calling messagebox with the value i.
End Sub
Private Function Test_function(ByVal i As Integer) 'creating a new variable also named i with the value being passed in.
i = i + 1 'incrementing the value of the i variable by 1.
Return (i) 'returning i
End Function
因此,就我所知,有一些概念你误解了 - ByVal
意味着什么,也许是变量范围的概念,以及Return
的作用。
显而易见的答案是,您未使用Test_function
返回的值。如果您有i = test_Function(i)
,则调用i
Test_function
另一种方法是传递i
ByRef而不是ByVal-如果你这样做,i
方法范围内的Test_function
将与{{1}相同在i
方法的范围内。但是因为你传递它Button1_Click
,ByVal
变量实际上是两个完全不同的变量。
答案 1 :(得分:1)
没有什么可以怀疑的,这只是一个简单的误解。如果您这样打电话,则打印:set database, ENV['DATABASE_URL']
的实际值:
i
然后两者都是一样的; 或者您可以通过以下方式检查:
MsgBox(Test_function(i))
这是因为你传递Dim tempVal = Test_function(i)'<-- will give 2
MsgBox(i)'<--- will give 1
的值而不是i作为参考,如果你把它作为参考传递,那么两者都是相同的。
因此,如果您更改功能签名如下:
i
相同的函数调用将为您提供Private Function Test_function(ByRef i As Integer)
i = i + 1
Return (i)
End Function
2