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