Lua入门

特性

  1. 轻量 文件较小,方便写入
  2. 可扩展、扩展机制简单、宿主语言提供功能Lua使用
  3. 支持 ”面相对象编程“ table
  4. 支持 面相过程编程 和 函数式编程
  5. 自动的内存管理
  6. table属于 通用类型:可以实现数组、哈希表、集合、对象等
  7. 函数 是一种数据类型 function
  8. 提供 thread (coroutine) 协同程序(unity时间分割)

字符串拼接使用 .. 或者 ,

print(1)
print("Hello World")
print("Hello" .. "World")
print("10" .. "29")
print(10 + 20)
print("10" + "20")
print("a", "b")
print(type("abc"))
print(type('c'))
print(type(true))
print(type(12))
print(type(12.9))
print(type(type))
print(type(print))
print(type(nil))

数据类型

lua 是动态类型语言:变量 不需要指定数据类型,只需要赋值

8个基本数据类型: nil boolean number string function userdata thread table

输出一个没有赋值过的变量

print(a)

在Lua中,false 和 nil 都看做假,其他为真

if false or nil then
    print("真")
else
    print("假")
end

数字 Number

print(type(2))
print(type(2.1))
print(type(0.99992323))

字符串

str1 = "apple"
str2 = "banana"
str3 = [[rogen]]
str4 = [[
    <root>
        <head>123</head>
        <price>12</price>
    </root>
]]
print(str1)
print(str2)
print(str3)
print(str4)

Lua变量

C# 中变量按照作用域划分:局部变量、成员变量、静态变量

Lua变量:全局变量、局部变量、表中域

默认所有的变量都是全局变量;局部变量 要在变量前加 local 关键字;变量默认值都是nil

function func1()
    a = 10 -- 全局变量
    local b = 20 -- 局部变量 
end

func1()
print(a,b)
c = 30 -- 全局变量
local d = 40 -- 局部变量

do
    local c = 100
    d = 90
    print(c, d)
end

赋值语句

Lua 可以同时 对多个变量赋值,变量列表 和 值列表的各个元素直接用逗号隔开

赋值 语句 右边的值依次赋给左边的变量

变量个数 > 值的个数: 按照变量个数补足nil

变量个数 < 值得个数: 多余得值会被忽略


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

x, y = 10, 20, 30
print(x, y)

m, n, w = 11, 22
print(m, n, w)

While循环

num = 5
while (num >= 1) do
    print(num)
    num = num - 1;
end

function

用函数返回两个数中的最大值

function getmax(num1, num2)
    if num1 > num2 then
        return num1
    else
        return num2;
    end
end

将 函数冲当参数 传递给另一个函数

function add(num1, num2, funcprint)
    result = num1 + num2;
    funcprint(result)
end

function testfunc1(x)
    print(x)
end
add(6,3, testfunc1)
myfunc2 = function(y)
    print("myfunc2", y)
end
add(10,20, myfunc2)
add(30,50,function(num)
    print(num)
end)

遍历table

function functable1(tab, func)
    for k, v in pairs(tab) do
        print(func(k,v))
    end
end

mytab1 = {key = "value1", key2 = "value2", key3 = "value3"}
functable1(mytab1, function(key, value)
    return key .."===>".. value
end)

多返回值

function getmax(tab)
    local maxindex = 1
    local maxval = tab[maxindex]
    for k, v in pairs(tab) do
        if v > maxval then
            maxindex = k
            maxval = v
        end
    end
    return maxindex, maxval
end

可变参数

function getaverage(...)
    local sum = 0
    local arg = {...}
    local length = #arg
    for k, v in pairs(arg) do
        sum = sum + v
    end
    return sum / length
end

运算符

num1 = 10
num2 = 2
print(num1 + num2)
print(num1 - num2)
print(num1 * num2)
print(num1 / num2)
print(num1 % num2)
print(num1 ^ num2)
print(-num2)

逻辑运算符

x,y = true, false
print(x and y)
print(x or y)
print(not(x and y))

一元运算符#: 返回容器的长度

print(#"Hello World")
print(#{1,2,3,4,5})

数组

一维数组

array = {"C#", "Lua", "C++"}
for k, v in pairs(array) do
    print(k, v)
end

print(string.rep("=", 30))
for k, v in ipairs(array) do
    print(k, v)
end
print(string.rep("=", 30))

for i = 1,#array do
    print(array[i])
end

多位数组

array = {}
function addArray()
    for i = 1,3 do
        array[i] = {}
        for j = 1,5 do
            array[i][j] = i * j
        end
    end
end
function getArray()
    for i = 1,3 do
        for j = 1,5 do
            print(array[i][j])
        end
    end
end

table也可以解决模块、包、对象等这些问题

table中是有构造的,构造器是创造和初始化的表达式

最简单的构造函数是{},用来创建一张空表

mytable = {}
mytable[1] = "abc"
print(mytable[1])

mytable = nil
print(mytable)
mytable = {}
mytable[1] = "Lua"
mytable["www"] = "修改前"
print("下标为1对应的元素是" .. mytable[1])
print("下标为1对应的元素是" .. mytable["www"])

mytable2 = mytable
print("下标为2对应的元素是" .. mytable2[1])
print("下标为2对应的元素是" .. mytable2["www"])
mytable2["www"] = "修改后"
print("下标为1对应的元素是" .. mytable["www"])
print("下标为2对应的元素是" .. mytable2["www"])
-- 释放变量
mytable2 = nil
print("mytable2的类型:" .. type(mytable2))
print("mytable的类型:" .. type(mytable))
print("下标为1对应的元素是" .. mytable["www"])

mytable = nil
print("mytable的类型:" .. type(mytable))
上一篇
下一篇