局部变量

局部变量 #

Move 中的局部变量是词法(静态)范围的。新变量是用关键字 let 引入的,它将隐藏任何以前具有相同名称的局部变量。局部变量是可变的,可以直接更新也可以通过可变引用更新。

语法

let <VARIABLE>:TYPE;  //explicit type annotation
let <VARIABLE>=<EXPRESSION>;  //implicit type annotation
module my_addrx::Variable
{
    fun local_variables()
    {
        let b:u8;
        let c=false;
        let d=b"hello world";
        let e:u64=10000;
        let f:address = @my_addrx;
    }
}

变量必须在使用前赋值

Move 的类型系统防止局部变量在赋值之前被使用。

let a;
let b=a+10; //ERROR

有效的变量名

变量名可以包含下划线 _、字母 az、字母 AZ 和数字 09。变量名必须以下划线 _ 或字母 az 开头。它们不能以大写字母开头。

// all valid
let x = 1;
let _x = 1;
let _A = 1;
let x0 = 1;
let xA = 1;
let foobar_123 = 1;

// all invalid
let X = 1; // ERROR!
let Foo = 1; // ERROR!

带有元组的多个声明

let 可以使用元组一次引入多个本地。括号内声明的局部变量被初始化为元组中的相应值。

//Valid
let (x,y,z) = (1,@0x1,false);
//Invalid
let (p,q) = (1,2,3,4);

未使用变量的下划线

在 Move 中必须使用每个变量(否则你的代码将无法编译),因此你不能初始化一个变量并保持不变。尽管您有一种方法可以将变量标记为有意未使用——使用下划线 _

module my_addrx::Variable
{
    fun local_variables()
    {
        let a=1;   //compiling this module will result in error as "a" is not being used.
    }
}
module my_addrx::Variable
{
    fun local_variables()
    {
        let _=1; //compiling this module will not result in error
        
        let b=10;
        _=b;    //This is called shadowing
    }
}