指定通过引用返回函数结果
语法
说明
使函数结果通过引用返回,而不是通过值返回。返回ByRef的函数将返回变量的地址,而不是像通过值返回时一样复制。这允许函数的调用者修改函数结果指向的变量。
如果未指定ByRef,则默认值是按值返回函数结果。
具有ByRef结果的函数不应该从函数返回局部变量,因为它们在从函数返回时将被破坏,使任何指针或引用无效。为了帮助编写安全的代码,编译器将在Function = x (或name = x )赋值和Return x 语句中使用局部变量时显示错误消息。
注意:在赋值表达式的左侧使用'='符号,当函数调用一个参数时,函数的结果(由引用返回)必须括在括号中,以解决解析歧义从fbc版本0.90,'=>'可以用于赋值,代替'=',与初始化器相同,允许避免解析歧义(无括号)。对于参数列表,即使是空的,也应该总是用括号括起来。
运算符(成员或全局)在用作函数时,也可以通过引用返回结果,使用相同的语法。
例子
Function min( ByRef I As Integer , ByRef J As Integer ) ByRef As Integer
''通过引用返回最小的整数,不会创建副本。
If I < J Then
Return I
Else
Return J
End If
End Function
Dim As Integer A = 13, B = 7
Print A, B
Print min( A , B )
min( A , B ) = 0
Print A, B
Function f( ) ByRef As Const ZString
''这个字符串字面值(因为在内存中静态赋值)将通过引用返回,不会创建任何副本。
Function = "A B C D"
End Function
Print f( )
Dim Shared As String s
Function f1( ) ByRef As String
''此变长字符串将通过引用返回,不会创建副本。
Function = s
End Function
Function f2( ByRef _s As String ) ByRef As String
''此变长字符串将通过引用返回,不会创建副本。
Function = _s
End Function
s = "A B C D"
Print s
f1( ) &= "EFGH"
Print s
''在撰写本文时,需要附上括号。
( f2( s ) ) &= "IJKL"
Print s
Function power2( ByRef _I As Integer ) ByRef As Integer
_I *= _I
''该整数将通过引用返回,不会创建副本。
Function = _I
End Function
Dim As Integer I = 2
power2( power2( power2( I ) ) ) ''函数return-byref级联等价于((I * I)*(I * I))*((I * I)*(I * I))= I ^ 8
Print I
与QB差别
参考