赋值语句

简介: Lua中的赋值用于改变变量或表域,支持同时对多个变量赋值。例如:`a, b = 10, 2x`。赋值时,Lua先计算右值再分配。可以交换变量值如:`x, y = y, x`。当变量与值数量不匹配时,不足的变量补nil,多余的值被忽略。多值赋值常用于函数返回值的接收和变量交换。优先使用局部变量,以防命名冲突并提高效率。

赋值语句

赋值是改变一个变量的值和改变表域的最基本的方法。

a = "hello" .. "world"
t.n = t.n + 1Lua 可以对多个变量同时赋值,变量列表和值列表的各个元素用逗号分开,赋值语句右边的值会依次赋给左边的变量。
a, b = 10, 2x <--> a=10; b=2x
遇到赋值语句Lua会先计算右边所有的值然后再执行赋值操作,所以我们可以这样进行交换变量的值:

x, y = y, x -- swap 'x' for 'y'
a[i], a[j] = a[j], a[i] -- swap 'a[i]' for 'a[j]'
当变量个数和值的个数不一致时,Lua会一直以变量个数为基础采取以下策略:

a. 变量个数 > 值的个数 按变量个数补足nil
b. 变量个数 < 值的个数 多余的值会被忽略
实例
a, b, c = 0, 1
print(a,b,c) --> 0 1 nil

a, b = a+1, b+1, b+2 -- value of b+2 is ignored
print(a,b) --> 1 2

a, b, c = 0
print(a,b,c) --> 0 nil nil
上面最后一个例子是一个常见的错误情况,注意:如果要对多个变量赋值必须依次对每个变量赋值。

a, b, c = 0, 0, 0
print(a,b,c) --> 0 0 0
多值赋值经常用来交换变量,或将函数调用返回给变量:

a, b = f()
f()返回两个值,第一个赋给a,第二个赋给b。

应该尽可能的使用局部变量,有两个好处:

避免命名冲突。
访问局部变量的速度比全局变量更快。

相关文章
|
5天前
变量初始化
【7月更文挑战第2天】变量初始化。
8 3
|
2月前
|
人工智能
赋值语句
Lua中的赋值用于改变变量或表域,支持同时赋值给多个变量。例如,`a, b = 10, 2*x`。赋值时,Lua先计算右值再赋给左变量,可用于变量交换。当变量与值数量不匹配时,变量多时补nil,值多时忽略多余值。多值赋值常用于函数返回值分配和变量交换,局部变量优于全局,能避免命名冲突且访问更快。
|
2月前
|
编译器 测试技术 Go
表达式求值——隐式类型转换与操作符属性
表达式求值——隐式类型转换与操作符属性
|
2月前
|
C语言 C++
逗号表达式与赋值表达式
逗号表达式与赋值表达式
23 0
|
8月前
|
编译器 C语言
C语言之操作符表达式求值篇
C语言之操作符表达式求值篇
51 0
|
9月前
|
C语言
赋值运算和赋值表达式
赋值运算和赋值表达式。
175 0
|
9月前
栈在求值表达式中的应用
栈在求值表达式中的应用
|
编译器 测试技术
C++11Lanbda表达式(匿名函数)
C++11Lanbda表达式(匿名函数)
110 0
|
C语言 索引
C语言——操作符(下)逗号表达式、下标引用、函数调用、和结构成员、表达式求值
C语言——操作符(下)逗号表达式、下标引用、函数调用、和结构成员、表达式求值
|
Java
1 变量,类型,运算符,表达式
1 变量,类型,运算符,表达式
64 0