变量

基础用法

name := 'Bob'
age := 20
large_number := i64(9999999999)
println(name)
println(age)
println(large_number)

在 V 语言中,变量使用 := 声明并初始化。这是唯一的变量声明方式,因此变量始终具有初始值。变量的类型根据右侧值自动推断。如需指定不同类型,可使用类型转换表达式 T(v) 将值 v 转换为类型 T。

与其他语言不同,V 语言只允许在函数内定义变量,默认不支持全局变量。所有变量和函数名必须采用蛇形命名法(snake_case),类型名则采用帕斯卡命名法(PascalCase)

可变变量

mut age := 20
println(age)
age = 21  // 使用 = 修改变量值
println(age)

V 变量默认为不可变。若要修改变量值,需用 mut 声明。移除第一行的 mut 尝试编译将触发错误。

初始化与赋值区别

注意 :=(声明初始化)和 =(赋值)的关键差异

未声明变量直接赋值会编译失败
fn main() {
    age = 21 // 错误:变量未声明
}
正确声明方式
fn main() {
    age := 21 
}

多变量操作方式

可单行修改多个变量值,实现无中间变量的值交换:

mut a := 0
mut b := 1
println('${a}, ${b}') // 0, 1
a, b = b, a           // 值交换
println('${a}, ${b}') // 1, 0

警告与声明错误

  • 开发模式:未使用变量触发警告("unused variable")
  • 生产模式:(v -prod foo.v):未使用变量直接编译失败

使用下划线忽略返回值:

fn foo() (int, int) {
    return 2, 3
}

fn main() {
    c, _ := foo() // 忽略第二个返回值
    print(c)      // 不触发警告
}

变量作用域规则

禁止变量遮蔽

父作用域已存在同名变量时报错:

fn main() {
    a := 10
    {
        a := 20 // 错误:重复定义 `a`
    }
}
允许字段遮蔽(结构体场景)
pub struct Dimension {
    width  int = -1
    height int = -1
}

pub struct Test {
    Dimension
    width int = 100 // 遮蔽 Dimension.width
}

fn main() {
    test := Test{}
    // 输出: 100 -1 -1 
    println('${test.width} ${test.height} ${test.Dimension.width}') 
}