通过引用传递参数

增加BYREF关键字主要是为了帮助人们移植VB工程。

它不是通过传递指针来工作,但是在函数结束时不释放参数的值, 并放入通过引用传递的表达式。

换句话说:

GetData(ByRef sResult)

实际上像下面这样做:

GetData(sResult) ' 压sResult进入堆栈,作为第一个参数
...              ' 在GetData结束后不释放堆栈
sResult = ...    ' 从堆栈取值并放入sResult

注意:这样, 能通过引用传递任何赋值表达式。

GetData(ByRef MyCollectionOfLabels["key"].Text)

在函数声明时, ByRef 意味着 可以 通过引用传递参数, 但是不是必须这样做。

在函数调用时, ByRef 意味着 希望 参数被通过引用传递。

作为Gambas的链接是完全动态的, 解释器在运行时检查是否函数真的允许使用 ByRef 。 这是为什么 ByRef 在函数声明和函数调用中都必须指定的原因。

ByRef 使函数调用的速度变慢, 因为需要值从堆栈恢复的检查和添加过程。

目前JIT编译器不支持 ByRef