Jea*_*dey 4 parameter-passing vala
或者存在像C这样的指针和引用?
我正在尝试使用vala,但很高兴知道vala是"通过引用传递"还是"按值传递"
首先,您应该了解默认的vala编译器valac编译为C(作为中间语言).然后使用C编译器(通常gcc)编译代码.
valac -C example.vala 将编译为 example.c
因此,您可以自己检查生成的C代码.
现在到了真正的问题:
Vala支持call-by-value和call-by-reference.它甚至比这更精细.
让我们以一个普通的C数据类型(int)为例.
呼叫按值:
public void my_func (int value) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
该值将被复制到函数中,无论你在value里面做my_func什么都不会影响调用者.
使用ref以下方式调用引用:
public void my_func (ref int value) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
地址将被复制到该功能中.你在value里面做的一切my_func也会在来电者身上反映出来.
使用out以下方式调用引用:
public void my_func (out int value) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
基本上相同ref,但在调用之前不必初始化值my_func.
对于GObject基于数据类型(非静态类),它会变得更复杂,因为您必须考虑内存管理.
由于这些总是使用指针ref(隐含地)进行管理,因此"out"修饰符现在反映了(隐式)指针的传递方式.
它可以说增加了一个间接层次.
string 数组数据类型也使用指针和自动引用计数(ARC)进行内部管理.
虽然气馁,但Vala也确实支持指针,所以你可以在C中拥有int *或MyClass *只是喜欢.