引用

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 语言一致)。