变量
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这个显示指定类型的风格,跟其他语言确实不太一样,一般的风格都是:
let x int = 1
let x: int = 1
//或者
var x int = 1
var x: int =1判断变量类型
通过使用typeof内置函数,可以判断变量类型:
默认不可变
跟rust一样,变量默认不可变,要声明为可变,使用mut关键字:
要注意区分 := 和 = 的不同之处:
:= 的含义是为变量声明并赋值。
= 的含义是为变量绑定一个新的值,也可以理解为修改变量值。
变量声明后,如果没有被使用:
开发编译(v run):编译器只是会警告,但仍然继续编译,方便开发调试,而不用去临时注释掉。
生产编译(v -prod):编译器会报错,停止编译。
以下几种情况,会编译不通过:
多变量赋值
条件赋值
匹配赋值
强制类型转换
可以通过T( ) 对类型进行显示声明,或者强制类型转换:
静态局部变量
跟C的静态局部变量一样,用关键字 static 声明,静态局部变量的值在函数调用结束之后不会消失,而仍然保留其原值。
一般来说,普通的V代码很少会用到静态局部变量,只有跟C集成的时候才会用到。
使用静态局部变量有以下2种方式:
在-translated模式中使用
在unsafe函数和代码块中使用
默认没有模块级/全局变量
V语言中,变量只能在函数里定义,就是局部变量,默认没有模块级变量,没有全局变量。
默认情况下编译器是没有全局变量声明的,但是为了跟C代码集成,有时候需要定义全局变量,可以在调用编译器时,通过增加 -enable-globals选项来启用。
可以使用 [c_extern]注解,在生成的C代码中,给全局变量增加extern关键字。
生成的C代码:
最后更新于
这有帮助吗?