--Linux 系统上安装
--curl -R -O http://www.lua.org/ftp/lua-5.3.0.tar.gz
--tar zxf lua-5.3.0.tar.gz
--cd lua-5.3.0
--make linux test
--make install
--Window 系统上安装 Lua
--Github 下载地址:https://github.com/rjpcomputing/luaforwindows/releases
--8种数据类型
--number(只有双精度类型double),string(字符串间用..连接,而不是+,+表示计算),
--boolean,nil,
--table(即动态的关联数组,声明形式a={},赋值形式a[],获取形式a[]或a.i(当索引为字符串类型时的一种简化写法),索引从1开始),function(可作为参数传递,支持函数式编程)
--thread,userdata
--斐波那契数列
function fib(n)
if n <= 2 then
return 1
end
prev2 = 1
prev1 = 1
result = 0
for _ = 3, n, 1 do
result = prev2 + prev1
prev2 = prev1
prev1 = result
end
return result
end
print(fib(50))--12586269025
--泛型for循环
--1 one
--2 two
--3 three
a = { "one", "two", "three" }
for i, v in ipairs(a) do
print(i, v)
end
--泛型for循环,达到continue效果,当v=3时跳过(lua里没有continue关键字)
--1
--2
--4
--5
arrays = { 1, 2, 3, 4, 5 }
for _, v in ipairs(arrays) do
flag = true
while (flag)
do
flag = false
if (v == 3) then
break
end
print(v)
end
end
--while循环
--b: 2
--b: 1
b = 2
while (true)
do
print([[b]] .. [[:]], b)
b = b - 1
if b == 0 then
break
end
end
--repeat循环(类似Java中的do while)
--c: 1
--c: 2
c = 1
repeat
print('c' .. ':', c)
c = c + 1
until (c == 3)
--一个函数返回多个值
--1 2 3
function add(num1, num2)
return num1, num2, num1 + num2
end
print(add(1, 2))
--方法重载,可变参数
--6
function add(...)
--局部变量
local rs = 0
for _, v in ipairs(...) do
rs = rs + v
end
return rs
end
print(add({ 1, 2, 3 }))
--string常用方法
s = 'hello'
s1 = 'HELLO'
print(string.upper(s))--HELLO
print(string.lower(s1))--hello
--连接
print(s .. s1)--helloHELLO
--替换
print(string.gsub(s, 'l', 'x'))--hexxo 2(替换了2次)
print(string.gsub(s, 'l', 'x', 1))--hexlo 1(替换了1次)
--查找
print(string.find(s, 'l'))--3 3(从1开始的起始索引为3,结束索引为3)
print(string.find(s, 'l', 4))--4 4(从4开始的起始索引为4,结束索引为4)
print(string.find(s, 'l', 5))--nil(从5开始的起始索引为nil,找不到)
print(string.find(s, 'a'))--nil(找不到)
--求长度
print(string.len(s))--5
print(#s)--5
--截取
print(string.sub(s, 2))--ello
print(string.sub(s, 2, 3))--el
print(string.sub(s, 2, 4))--ell
--反转
print(string.reverse(s))--olleh
--拷贝
print(string.rep('abc', 2))--abcabc
--表操作
t = { { 3, 2, 1 }, { 'q', 'w', 'e' } }
--新增
--方式一
t[3] = { 'a', 'b' }
--方式二
--table.insert(t, { 'a', 'b' })
--修改表t中第3个元素的值
t[3] = { 4, 5, 6 }
--删除
--t[3] = nil
--table.remove(t)
for i, v in pairs(t) do
local r = ''
for i, v in pairs(v) do
r = r .. v
end
print('{' .. r .. '}')
end
--表排序
fruits = { "banana", "orange", "apple", "grapes" }
print("排序前")
for k, v in ipairs(fruits) do
print(k, v)
end
table.sort(fruits)
print("排序后")
for k, v in ipairs(fruits) do
print(k, v)
end
--元表(类似Json)
mt = { a = 'a', b = 'b' }
for i, v in pairs(mt) do
print(i, v)
end
--模块
require('com.lyf.lua.module1')
print(module.a)
module.func1()
module.func3()
输出:
lua.exe com/lyf/lua/test.lua
12586269025
1 one
2 two
3 three
1
2
4
5
b: 2
b: 1
c: 1
c: 2
1 2 3
6
HELLO
hello
helloHELLO
hexxo 2
hexlo 1
3 3
4 4
nil
nil
5
5
ello
el
ell
olleh
abcabc
{321}
{qwe}
{456}
排序前
1 banana
2 orange
3 apple
4 grapes
排序后
1 apple
2 banana
3 grapes
4 orange
a a
b b
你好
这是一个公有函数!
这是一个私有函数!