--单行注释
--[[
多行注释
--]]
-- 默认全局变量
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