变量

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代码:

最后更新于

这有帮助吗?