引用
struct Foo {}
fn (foo Foo) bar_method() {
// ...
}
fn bar_function(foo Foo) {
// ...
}
如果函数参数是不可变的(如上述示例中的 foo
),V 语言会根据场景自动选择按值传递或按引用传递。这一决策由编译器完成,开发者无需干预。
您不再需要记忆结构体应该按值传递还是按引用传递。
通过添加 &
可强制结构体始终按引用传递:
struct Foo {
abc int
}
fn (foo &Foo) bar() {
println(foo.abc)
}
此时 foo
仍为不可变状态。若需修改参数,必须使用 (mut foo Foo)
语法。
总体而言,V 的引用机制类似于 Go 的指针和 C++ 的引用。例如,通用树形结构的定义如下:
struct Node[T] {
val T
left &Node[T] // 左子树节点引用
right &Node[T] // 右子树节点引用
}
解引用操作需使用 *
运算符(与 C 语言一致)。