-- local 局部
-- local表=全局表,是同一个表,这主要是由于lua的表机制是匿名的,相当于函数的指针,local foo = foo,
-- 即使本地foo没有在全局_G注册,还是引用的是同一个表。当没有变量指向表的时候,垃圾回收器会销毁这个匿名表。
-- 而local变量则是创建一个新的变量,遵守子作用域覆盖父作用域的规则。
local c={}
function c:test()
self._m="xxxx"
end
-- 1:冒号定义或调用方法,自带self参数,多余参数被遗弃
local b={}
--[[
c.test(b)
print(b._m)
print(c._m)
--输出 xxxx nil
]]--
c:test(b)
print(b._m)
print(c._m)
--输出nil xxxx
-- 2:定义的参数个数和传的参数个数无关
function tfun(x,y)
print(x,y)
end
tfun(1)
tfun(2,3)
tfun(4,5,6)
-- 1 nil
-- 2 3
-- 4 5
-- 3:单参数可不带括号调用函数
print "end"
-- 4: a or b 当a = nil或false时, a or b这个逻辑判断表达式的值就是b, 当a不为false或者nil时, 那么这个表达式的值就是a.
print(false or 1)
-- 1
print(0 or false)
-- 0
print(nil or "hello")
-- hello
--5 :当多值函数后面再有表达式时, 多值函数就只返回第一个值, 后面的值被抛弃.
print(string.find("hello","llo"), "hell") -- 这样的话string.find("hello","llo")只返回了第一个结果3. 5被抛弃了.
-- 3 hell
tab={9,6,3}
print(#tab)
for i=1,#tab do
print(i,tab[i])
i = i+2 -- 并不会改变for循环中的i数值
end
-- 7:
function square(iteratorMaxCount,currentNumber)
print("square" , currentNumber)
if currentNumber<iteratorMaxCount
then
currentNumber = currentNumber+1
return currentNumber, currentNumber*currentNumber
end
end
-- square 方法多次调用,且传参不带括号
for i,n in square,3,0
do
print(i,n)
end
--[示例1.]--
local tt ={ [1] = "test3", [4] = "test4", [5] = "test5"}
for i,v in pairs(tt) do -- 输出 "test4" "test3" "test5"
print( tt[i] )
end
for i,v in ipairs(tt) do -- 输出 "test3" k=2时断开
print( tt[i] )
end
-- [[示例2.]] --
tbl = {"alpha", "beta", [3] = "uno", ["two"] = "dos"}
for i,v in ipairs(tbl) do --输出前三个
print( tbl[i] )
end
for i,v in pairs(tbl) do --全部输出
print( tbl[i] )
end
--[示例3.]--
-- pairs是按物理顺序遍历的,而用[]时表是按哈希构造的,物理上是乱的;直接写1,2,3时表是按物理顺序构造的
tableTest = { [1] = 1, [2] = 2, [3] = 3, [4] = 4 }
for key, value in pairs(tableTest ) do
print(key..value)
end
-- 输出:11 22 44 33
tableTest = { 1, 2, 3, 4 }
for key, value in pairs(tableTest ) do
print(key..value)
end
-- 输出:11 22 33 44