天天看點

lua學習筆記(二)

1.局部變量與塊

--控制結構或函數或者程式塊的執行體成為塊  互動模式下一行算一個塊是以如下:

--可以顯示的用do end 來劃定塊 局部變量隻在目前的塊中有用

local a,b=1,10

if a<b then

  print(a)

  local a  --會比對一個最近的有效果的局部變量

  print(a)

  end

  print(a,b)

n=10

if n<=10 then

local n = n  --可以利用這種特點将全局變量的值賦給局部變量,進而儲存全局變量

n = n-1

print(n)

end

print(n)

2.控制結構

--控制結構 循環和分支

 --1.if then       (elseif then)     (else)        end

 a=10

 a=9

 a=8

 if a==10 then

 print(a)

 elseif a==9 then

 print(2*a)

 else

print("a:"..a)

 end

if a<=10 then

print("哈哈哈哈哈哈哈")

end

--2. while循環

i=5

while i<=10 do

print(i)

i=i+1

 end

--3.類似于C中do while 循環的 repeat until

t=2;

repeat

t=io.read("*number")

until t==6

print(t)

--3.數字型for循環  執行個體中的i預設為局部變量并且 i=1,9,2隻會在一開始時初始化一次

--表示i從1開始每次遞增2     i<=9翁跫

for i=1,9,2 do

print(i)

end

--泛型for循環主要是針對表和檔案操作的 需要用到疊代器函數

b={1,2,3,4,5,6}

for k,v in pairs(b) do

print(k,v)

end

--break 與 return必須是一個塊最後一條語句 即是一個程式塊最後一個語句或者是end else 或 until 的前一條語句

local i = 1

for i=1,#b do

if(i==5) then   --ok

print(i)

 break;

 end

end

--[[local i = 1

for i=1,#b do  --錯誤的

if(i==5) then

 break;

 print(i)

 end

end]]

3.指派

--多重指派

a,b=1,2;

print(a.." "..b)

a,b=1,2,3;

print(a.." "..b)

--a,b=1;

print(a.." "..b)

--利用多重指派交換

a=3

b=4

a,b=b,a

print(a.." "..b)

4.函數的多重傳回值

--函數形參可以與傳的實參個數不同,此時,若形參多,則多餘的形參被指派為nil,若實參多,則多餘的實參被舍棄掉

--比較奇葩的地方:當形參隻有一個并且是字元串或table類型的變量時 調用時可以不加括号

function printstring(n)

print(n)

end

printstring "123"

function printfive(a,b,c,d,e)

print(a,b,c,d,e)

end

printfive(1,2,3)

printfive(1,2,3,4,5,6)

 --多重傳回值 不管是指派,函數中調用函數,把傳回值給一個表 還是位于return語句中 都隻能在它位于最後時才起作用

 --指派的情況

 --1.能夠傳回多個值  位于指派的最後面的一個

 function f()

 return 1,2,3

 end

 a,b,c = f()

  print(a,b,c)

 a,b,c,d = 9,f()

 print(a,b,c,d)

 --2.不能傳回多個值 不是位于指派的最後面一個不會傳回多個值

 a,b,c = f(),4

 print(a,b,c)

 --函數調用函數的情況,同理  還是拿f為例

 print(f())

 print(4,5,6,f())

 print(f(),4,5,6)

 --把傳回值傳給一個表

 function f0()

 return 0,2,4

 end

 function f1()

 return 1,3,5

 end

 h={f0()}

 for k,v in pairs(h) do

 print(k,v)

 end

  h={f0(),f1()}

 for k,v in pairs(h) do

 print(k,v)

 end

--return中調用傳回多個值的函數,同理

function f2()

return f1(),8

end

print(f2())

function f3()

return 8,f1()

end

print(f3())

--若傳回多值的表達式加了括号,盡管它是最後一個,但它僅傳回一個值

print((f3()))

--unpack 它接受一個數組作為參數,并且從1開始傳回該數組的所有元素

a={1,2,3,4,5,6,7,8,9,10}

c,d = unpack(a)  --注意,這樣指派,c和d都是number類型

print(c,d)

print(unpack(a))

print((unpack(a)))