-- 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