V是静态类型语言,每一个变量都有对应类型
声明和赋值
V语言中只有唯一的一种变量声明和赋值方式 :=
并且声明和赋值是要同时的,这意味着变量总会有一个初始值
a:=false
b:='abc'
c:=3 //默认推断为int
f:=3.1 //默认推断为f64
类型推断
上述的代码并没有体现出变量的类型,是因为编译器会根据变量的值自动进行类型推断
显示指定类型
如果不希望由编译器自动类型推断,可以通过T(value)的格式明确变量类型,T是类型,value是变量值
x:=i64(3) //x是i64类型,而不是默认推断的int
y:=f32(3.0) //y是f32类型,而不是默认推断的f64
判断变量类型
通过使用typeof内置函数,可以判断变量类型
x:=3
s:='abc'
println(typeof(x)) //int
println(typeof(s)) //string
默认不可变
跟rust一样,变量默认不可变,要声明为可变,使用mut关键字
mut age := 20
println(age)
age = 21
println(age)
要注意区分:=和=的不同之处:
:=的含义是为变量声明并赋值
=的含义是为变量绑定一个新的值,也可以理解为修改变量值
变量声明后,如果没有被使用:
开发模式(v run),编译器只是会警告,但是仍然继续编译,方便开发调试,而不用去临时注释掉
生产编译模式(-prod),编译器会报错,停止编译
以下几种情况的代码,会编译不通过:
fn main() {
age = 21 //变量还未声明
}
fn main() {
age := 21 //变量声明和赋值后,没有使用,非生产编译,只会警告,--prod生产编译时会不通过
}
fn main() {
a := 10
if true {
a := 20 //跟其他语言不一样,没有上级变量隐藏,在函数内部,同名的变量只能定义一个
}
}
强制类型转换
可以通过as关键字把类型进行显式转换
如果不可显式转换的,编译器直接报错
x:=int(3)
y:=x as byte
println(y)
z:=x as f32
println(z)
f := 1.2
ab := f as int
println(ab) //输出1,强制转换丧失精度
没有模块级变量/全局变量
跟其他语言比较不同的是,V语言中的变量只能在函数中定义,就是局部变量,
这意味着V语言中没有全局变量,没有模块级变量









网友评论