变量
基础用法
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}') 
}