当前位置:   article > 正文

Lua 语法_lua local stringlist = argv[1]

lua local stringlist = argv[1]

数据类型


Lua 是一个动态类型语言,一个变量可以存储任何类型的值。

Lua 常用数据类型

类型名取值
空 nil空类型只包含一个值,即 nil。nil 表示空,所有没有赋值的变量或表的字段都是 nil。
布尔 boolean布尔类型包含 true 和 false 两个值
数字 number整数和浮点数都是使用数字类型存储,如1、0.2、3.5e20 等。
字符串 string它与 Redis 的键值一样都是二进制安全的。
表 table表类型是 Lua 语言中唯一的数据结构,既可以当数组又可以当字典,十分灵活
函数 function函数在 Lua 中是一等值,可以存储在变量中作为函数的参数或返回结果。

变量


Lua 的变量分为全局变量和局部变量。全局变量无需声明就可以直接使用,默认值是 nil。

a = 1 -- 为全局变量 a 赋值
print(b) -- 无需声明即可使用,默认值是 nil
a = nil -- 删除全局变量 a 的方法是将其赋值为 nil。全局变量没有声明和未声明之分,只有非 nil 和 nil 的区别
  • 1
  • 2
  • 3

声明局部变量的方法为local 变量名

local c -- 声明一个局部变量 c,默认值是 nil
local d = 1 -- 声明一个局部变量 d 并赋值为 1
local e, f -- 可以同时声明多个局部变量
  • 1
  • 2
  • 3

声明一个存储函数的局部变量的方法为

local say_hi = function ()
	print 'hi'
end
  • 1
  • 2
  • 3

注释


Lua 的注释有单行和多行两种。

单行注释:-- 注释内容

多行注释 :-- [[ 多行注释内容 ]]

赋值


Lua 支持多重赋值

local a, b = 1, 2 -- a 的值是1,b 的值是2
local c, d = 1, 2, 3 -- c 的值是1,d 的值是2,3 被舍弃
local e,f = 1 -- e 的值是1,f 的值是 nil
  • 1
  • 2
  • 3

在执行多重赋值时,lua 会先计算所有表达式的值

local a = {1, 2, 3}
local i = 1
i, a[1] = i + 1, 5
  • 1
  • 2
  • 3

上面最后一个赋值语句变为了i, a[1] = 2, 5 所以赋值后 i 的值为 2,a 则为 {5, 2, 3}

操作符


数学操作符

包括常见的 +、-、*、/、%(取模)、-(一元操作符,取负)、^(幂运算符)

比较操作符

操作符说明
==比较两个操作数的类型和值是否相等
~=与 == 的结果相反
< > <= >=小于 大于 小于等于 大于等于

逻辑操作符

操作符说明
not根据操作数的真和假相应地返回 false 和 true (取返)
anda and b中如果 a 是真则返回 b,否则返回 a
ora or b中如果 a 是假则返回 a 否则返回 b
print(1 and 5) -- 5
print(1 or 5) -- 1
print(not 0) -- false
print('' or 1) -- ''
  • 1
  • 2
  • 3
  • 4

Lua 的逻辑操作符支持短路,也就是说 false and foo(),Lua 不会调用 foo 函数,因为第一个操作数已经决定了无论 foo 函数返回的结果是什么,该表达式的值都是 false。or 操作符与之类似。

连接操作符

连接操作符只有一个..用于连接两个字符串。

print('hello'..' '..'world!') -- 'hello world!'
print('The price is '.. 25) -- 'The price is 25'
  • 1
  • 2

取长度操作符

#用来获取字符串或表的长度

print(#'hello') -- 5
  • 1

各个运算符的优先级顺序如下表(优先级依次降低)

^
not # - (一元)
* / %
+ -
..
< > <= >= ~= ==
and
or

if 语句


Lua 的 if 语句格式如下:

if 条件表达式 then
	语句块
elseif 条件表达式 then
	语句块
else
	语句块
end
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

循环语句


Lua 支持while repeat for循环语句。

while 语句形式

while 条件表达式 do
	语句块
end
  • 1
  • 2
  • 3

repeat 语句形式

repeat
	语句块
until 条件表达式
  • 1
  • 2
  • 3

for 语句形式

数字形式

for 变量 = 初值, 终值, 步长 do
	语句块
end
-- 其中步长可以省略,默认步长为1。
  • 1
  • 2
  • 3
  • 4

通用形式

for 变量1, 变量2, ..., 变量N in 迭代器 do
	语句块
end
  • 1
  • 2
  • 3

表类型


表是 Lua 中唯一的数据结构,可以理解为关联数组,任何类型的值(除了空类型)都可以作为表的索引。

表的定义方式

a = {} -- 将变量 a 赋值为一个空表
a['field'] = 'value' -- 将 field 字段赋值 value
print(a.field) -- => 'value',a.field 是 a['field'] 的语法糖

-- 也可以这样定义
people = {
	name = 'Bob',
	age = 29
}
print(people.name) -- => 'Bob'
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

当索引为整数的时候表和传统的数组一样

a ={}
a[1] = 'Bob'
a[2] = 'Jeff'

-- 也可以写成下面这样
a = {'Bob', 'Jeff'}
print(a[1]) -- => 'Bob'
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

使用通用形式的 for 语句遍历数组

local a = {'Bob', 'Jeff'}
for index, value in ipairs(a) do 
	print(index)
	print(value)
end

-- 打印结果如下
-- 1
-- Bob
-- 2
-- Jeff
-- ipairs 是 Lua 内置的函数,实现类似迭代器的功能。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

使用数字形式的 for 语句遍历数组

local a = {'Bob', 'Jeff'}
for i = 1, #a do
	print(i)
	print(a[i])
end

-- 打印结果如下
-- 1
-- Bob
-- 2
-- Jeff
-- #a 的作用是获取表 a 的长度
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

使用迭代器 pairs 遍历非数组的表值

local people = {
	name = 'Bob',
	age = 29
}

for index, value in pairs(people) do
	print(index)
	print(value)
end

-- 打印结果如下
-- name
-- Bob
-- age
-- 29

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

pairs 与 ipairs 的区别在于前者会遍历所有值不为 nil 的索引,而后者只会从索引 1 开始遍历到最后一个值不为 nil 的整数索引。

函数


函数的定义

function (参数列表)
	函数体
end

-- 可以将其赋值给一个局部变量
local square = function (num)
	return num * num
end

-- 使用语法糖简化函数的定义
local function square (num)
	return num * num
end
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

形参为...获取所有实参列表

local function square (...)
	local argv = {...}
	for i = 1, #argv do
		argv[i] = argv[i] * argv[i]
	end
	return unpack(argv)
end

a, b, c = square(1, 2, 3)
print(a)
print(b)
print(c)

-- 定义结果如下
-- 1
-- 4
-- 9
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

在 Lua 中 return 和 break(用于跳出循环)语句必须是语句块中的最后一条语句,简单地说在这两条语句后面只能是 end、else 或 until 三者之一。如果希望在语句块中间使用这两条语句的话可以人为地使用 do 和 end 将其包围。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/502674
推荐阅读
相关标签
  

闽ICP备14008679号