412A-B1A-LUA-lua入门

83 阅读4分钟

基本语法

  • lua -i : 交互式编程

  • lua hello.lua 默认脚本式编程

  • 注释语法

-- 单行注释


--[[
    多行注释1
    多行注释1
]]
  • 空格,没有硬性要求,为了提高代码的可读性,适当的缩进
  • 换行:
-- 如果是局部变量,定义在同一行代码中,值可以正常操作
> local i=0  print("i:",i)
i:      0

-- 如果是局部变量,定义在不同行,且不再代码块中,可能无法操作

运算符

算术运算符

下表显示了 Lua 语言支持的所有算术运算符。 假设变量 A 持有 10 并且变量 B 持有 20 然后 −

显示示例

运算符描述示例
+添加两个操作数A + B 将得到 30
-从第一个操作数中减去第二个操作数A - B 将得到 -10
*两个操作数相乘A * B 将得到 200
/分子除以分母B / A 将得到 2
%取模运算符和整数除法后的余数B % A 将得到 0
指数运算符取指数A^2 将得到 100
-一元 - 运算符作为否定-A 将得到 -10

关系运算符

下表显示了 Lua 语言支持的所有关系运算符。 假设变量 A 持有 10 并且变量 B 持有 20 然后 −

显示示例

运算符描述示例
==检查两个操作数的值是否相等,如果是则条件为真。(A == B) is not true.
~=检查两个操作数的值是否相等,如果值不相等则条件为真。(A ~= B) is true.
>检查左操作数的值是否大于右操作数的值,如果是则条件为真。(A > B) is not true.
<检查左操作数的值是否小于右操作数的值,如果是则条件为真。(A < B) is true.
>=检查左操作数的值是否大于或等于右操作数的值,如果是则条件为真。(A >= B) is not true.
<=检查左操作数的值是否小于或等于右操作数的值,如果是的,则条件将变为true。(A <= B) is true.

逻辑运算符

下表显示了 Lua 语言支持的所有逻辑运算符。 假设变量 A 为真,变量 B 为假,则 −

显示示例

运算符描述示例
and称为逻辑与运算符。 如果两个操作数都不为零,则条件为真。(A and B) is false.
or称为逻辑或运算符。 如果两个操作数中的任何一个非零,则条件变为真。(A or B) is true.
not称为逻辑非运算符。用于逆转其操作数的逻辑状态。 如果条件是 true,则逻辑非运算符结果会是 false。!(A and B) is true.

杂项运算符

..连接两个字符串。a..b 其中 a 是"Hello",b 是"World",将返回"Hello World"。
#返回字符串或表格长度的一元运算符。#"Hello" 将返回 5

数据类型

默认情况下,所有变量都将指向 nil,直到它们被赋值或初始化。 在 Lua 中,在条件检查的情况下,零字符串和空字符串被认为是真的。 因此,在使用布尔运算时必须小心。 我们将在接下来的章节中了解更多使用这些类型的信息

变量

-- 局部变量
-- 声明字符串,可以用单引号或双引号,
local str = 'hello'
-- 字符串拼接可以使用 ..
local str2 = 'hello' .. 'world'
-- 声明数字
local num = 21
-- 声明布尔类型
local flag = true

local i=1,j  j =2 print(i,j)  -- true

local i,j,k=10,20,30 print(i,j,k)  -- true

local i=1,j=2 print(i,j) -- 错误写法

-- 全局变量
i=1
j=2
print(i,j)


i=1 ,j
j=2
print(i,j)

i,j,k=10,20,30 
print(i,j,k)  -- true

Lua中的table类型既可以作为数组,又可以作为Java中的map来使用。数组就是特殊的table,key是数组角标而已:

-- 声明数组 ,key为角标的 table
local arr = {'java', 'python', 'lua'}
-- 声明table,类似java的map
local map =  {name='Jack', age=21}

Lua中的数组角标是从1开始,访问的时候与Java中类似:

-- 访问数组,lua数组的角标从1开始
print(arr[1])

Lua中的table可以用key来访问:

-- 访问table
print(map['name'])
print(map.name)

循环


for

语法

for 初始步骤, 最大/最小值 ,步进值
do
    代码块
end

举例1

for i=0, 10 ,2
do
    print("i = ",i)
end

注:for i=10, 10 ,2 结果是循环体会执行一次


while

语法

while(条件判断语句)
do
   单个语句或者语句块
end

举例

t = 1
while (t < 3) -- 表达式
do
    print("t :", t)
    t = t + 1
end

repeat...until

语法

repeat
	代码块
until(条件判断语句)

注意: until(结束条件) 也就是说until(true) 是结束这个循环,而不是进入循环 当until(false)时是进入循环

举例

a=10
repeat
	print("a的值为:", a)
	a = a + 1
until( a > 15 )

迭代器

举例1:遍历数组

-- 声明数组 key为索引的 table
local arr = {'java', 'python', 'lua'}
-- 遍历数组
for index,value in ipairs(arr) do
    print(index, value) 
end

举例2:遍历普通table

-- 声明map,也就是table
local map = {name='Jack', age=21}
-- 遍历table
for key,value in pairs(map) do
   print(key, value) 
end

函数

定义函数的语法:

function 函数名( argument1, argument2..., argumentn)
    -- 函数体
    return 返回值列表
end

例如,定义一个函数,用来打印数组:

function printArr(arr)
    for index, value in ipairs(arr) do
        print(value)
    end
end

需求:自定义一个函数,可以打印table,当参数为nil时,打印错误信息

function printArr(arr)
	-- 当arr为nil时(即false),not arr表示true
    if not arr then
        print('数组不能为空!')
        return nil
    end
    for index, value in ipairs(arr) do
        print(value)
    end
    print("---")
end

条件控制

类似Java的条件控制,例如if、else语法:

if(布尔表达式)
then
   --[ 布尔表达式为 true 时执行该语句块 --]
else
   --[ 布尔表达式为 false 时执行该语句块 --]
end


Citation:

References: