[lua]笔记

--单行注释
--[[
多行注释
--]]

-- 默认全局变量
a = "I am yoyo!" 
print(a) --I am yoyo!
print(b) --nil
a = nil  --删除一个全局变量
print(a)      --> nil

-- local 局部变量,访问局部变量的速度比全局变量更快,尽量使用局部变量
local c = 5        
function joke()
    d = 5           -- 全局变量
    local e = 6     -- 局部变量
end
joke()
print(d, e)          --> 5 nil

do 
    local a = 6     -- 局部变量
    b = 6           -- 全局变量
    print(a,b);     --> 6 6
end
print(a,b)      --> 5 6

--赋值
a, b = 10, 2*x       <-->       a=10; b=2*x 可以多个赋值

--会先计算右边所有的值,再赋值
x, y = y, x                     -- swap 'x' for 'y'
a[i], a[j] = a[j], a[i]         -- swap 'a[i]' for 'a[j]'

-- 右边值不够,nil补足
a, b, c = 0, 1
print(a,b,c)             --> 0   1   nil
-- 右边值过多,忽略
a, b = a+1, b+1, b+2     -- value of b+2 is ignored
print(a,b)               --> 1   2

-- 数据类型:nil boolean string number function userdata thread table

print(type(10.4*3))             --> number
print(type(print))              --> function
print(type(type))               --> function
print(type(true))               --> boolean, true-真 false和nil为假
print(type(nil))                --> nil

-- 数据类型:string
print(type(type(X)))            --> string
print(type("Hello world"))      --> string

-- 单引号内:string
string2 = 'runoob.com'
print("字符串 2 是",string2)
-- 可以用 2 个方括号 "[[]]" 来表示"一块"字符串
html = [[
<html>
<head>
</head>
<body>
</body>
</html>
]]

print("2" + 6) --8.0 对字符进行算术操作,会将字符转为数字

-- ..表示字符串连接操作
print("a" .. 'b') --ab 
print(157 .. 428) --157428

-- # 计算字符串的长度
len = "www.runoob.com"
print(#len) --14

-- 数据类型:table

-- 创建一个空的 table
local tbl1 = {}

-- 直接初始表
local tbl2 = {"apple", "pear", "orange", "grape"}



--可以是map,类型可以并存,不存在key,则value为nil
a = {}
a["key"] = "value"
--当索引为字符串类型时,可以使用 a.key
key = 10
a[key] = 22
a[key] = a[key] + 11

for k, v in pairs(a) do
    print(k .. " : " .. v)
    --key : value
     --10 : 33
end

-- table索引以 1 开始
local tbl = {"apple", "pear", "orange", "grape"}
for key, val in pairs(tbl) do
    print("Key", key)
    --Key    1
    --Key    2
    --Key    3
    --Key    4
end

-- 数据类型:function
function factorial1(n)
    if n == 0 then
        return 1
    else
        return n * factorial1(n - 1)
    end
end
print(factorial1(5)) --120
factorial2 = factorial1
print(factorial2(5)) --120

--函数可以作为参数传入
function testFun(tab,fun)
    for k ,v in pairs(tab) do
        print(fun(k,v));
    end
end

tab={key1="val1",key2="val2"};
testFun(tab,
function(key,val) --匿名函数
    return key.."="..val;
    --key1 = val1
    --key2 = val2
end
);

-- 数据类型:thread
原文地址:https://www.cnblogs.com/zengyou/p/7541663.html