xLua | Lua Basics | 1 Lua语法基础

1. Background

2. Environment

修改环境变量

配置VSCode环境

cmd运行lua文件
cmd运行lua.exe CTRL+ C退出

3. Grammar

3.1 变量

动态类型;弱类型
大小写敏感;
默认全局;
带GC

3.2 类型

nil;boolean;number;string;function;userdate;thread;table

a = 123
print(a)
print(type(a))

--动态类型
a = "abc"
print(a)
print(type(a))

--大小写敏感
A = "cfj"
print(a)

--变量默认全局变量
local b = 456

3.3 语句
1、注释语句
--注释
--[[
多行
注释
]]
2、赋值语句

支持多变量赋值

--赋值
a,b = 123,"abc"
print(a)
print(b)

a,b = b,a
print(a)
print(b)
3、 顺序/分支/循环语句

if分支:false,nil - false / 0 - true

age = 12
if age > 18 then
    print("work")
elseif age > 10 then
    print("Study")
else
    print("play")
end

print(type(age > 18))

for循环:起始,结束,步长 
while循环
有break无cotinue
repeat until

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

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

--while
a = 1
while a < 10 do
    print(a)
    a = a + 2
end

--repeat until
a = 1
repeat
    print(a)
    a = a + 2
until a >= 10
 4、小示例
ans = 15
repeat
    print("guess the password(<100)")
    a = tonumber(io.read())


    if a == ans then
        print("right!")
        break
    elseif a > ans then
        print(a, "Big!")
    else
        print(a,"Small!")
    end
until false
3.4 运算符
1、数学运算符
-- 数学运算
print(5 + 3)
print(5 * 3)
print(5 / 3)
print(5 // 3)
print(5 % 3)
print(5.5 % 3)
print(5 ^ 3)

--没有 ++ +=
2、关系运算符
--关系运算符
--< > >= <= == ~=
3、逻辑运算符
--逻辑运算符
--and or not
if age >18 and age < 70 then
    print("work")
else
    print("play")
end

if not (age > 70) then
    print("young")
end

4、位运算符

5、其他运算符

#  ..

--# 表示表长
--注意有一些未定义的情况
print(#{1,2,3})
print(#"{1,2,3}")

--..
-- 少使用
a = "abc"
b = "def"
c = a..b
print(c)
6、 短路求值
--and
a = true and false
b = false and 3
c = true and 3
print(a)
print(b)
print(c)
--result
false
false
3

--or
e = true or 111 + 222
f = false or 111 + 222
print(e)
print(f)
--result
true
333

--and + or 模拟三目运算符
age = 14
canVote = age > 18 and true or false
print(canVote)
--result
false
7、优先级与结合性

3.5 table基础

唯一的内置数据结构

1、定义与访问、

键值对,下标从1开始,nil不能作为键值

--定义
a = {}
b = {1,2,3,5,"a","b"}
c = {x = 123,y = 345}

--访问
print(a[1])
print(b[5])
print(c["x"])
--table["key"] > table.key 
print(c.x)

--增加
a.z = 789

--嵌套
d = {pos = {z = 123}}
print(d.pos.z)
2、遍历

pairs ipairs
定义顺序与储存顺序不一定一致

--pairs
b = {1,2,3,5,"a","b", c = 23, d = 79}
for k,v in pairs(b) do
    print(k," : ", v)
end

--result
1        :      1
2        :      2
3        :      3
4        :      5
5        :      a
6        :      b
d        :      79
c        :      23
--ipairs
b = {1,2,3,5,"a","b", c = 23, d = 79}
for k,v in ipairs(b) do
    print(k," : ", v)
end

--result
1        :      1
2        :      2
3        :      3
4        :      5
5        :      a
6        :      b
3.6 函数
1、定义与调用
--定义
add = function (a,b)
    return a + b
end
function sum(a,b)
    return a + b
end
function fun1(a, b)
    print(a)
    print(b)
    return a + b, a* b
end

r1,r2 = fun1(2,3,7)
print(r1,r2)
2、高阶函数

类似变量

--高阶函数 第一类 first class
function process(f, a, b)
    print(f)
    print(a)
    print(b)
    print(f(a,b))
end

process(add, 2,3)
process(fun1, 2, 3)
3、可变参数
--可变参数 
--#
function add2(...)
    local sum = 0
    local arg = {...}
    for k,v in  ipairs(arg) do
        sum = sum + v
    end
    return #arg, sum
end

print(add2(1,2,3,7,9,8))

function average(...)
    local count, sum, temp = add2(...)
    print(temp)
    return sum/count
end

print(average(1,2,3,7,9,8))
3.7 函数库
1、string
--string
a = "abc"
b = "CFJ"
c = "abc\x41\ncjc\\cfj"
d = [[
long string

\n
\b \\
]]
print(string.upper(a))
print(b:lower())
2、table
--table
a = {1,2,1,3,7,9}
b = {2,4,6,8,2,5}
table.insert(a, 3, "a")
table.remove(a,2)
table.sort(b)

for k,v in pairs(a) do
    print("k: ", v)
end
for k,v in pairs(b) do
    print("k: ", v)
end
print(table.concat(a,"-",1,4))

模拟连接符.. 

--..
local t = {}
for line in io.lines() do
    t[#t+1] = line
    if #line <= 0 then
        break
    end
end
local s = table.concat(t,"+")
print(s)
3、math
--math
print(math.sin(math.pi/4))

math.randomseed(os.time())
for i = 1,10,2 do
    print(math.random(1,10))
end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值