Lua學習筆記

lt發表於2016-10-23

Lua 5.3 中文手冊

1.求子字串

D:\lua53>lua53
Lua 5.3.3  Copyright (C) 1994-2016 Lua.org, PUC-Rio
> s="123456"
> s
123456
> string.sub(s,1,3)
123
> string.sub(s,-1,3) --如果引數2為負數,提供引數3則返回空串

> string.sub(s,-1,1)

> string.sub(s,-1)
6
> string.sub(s,-2,1)

>

2.多變數賦值

> R,C,T,W={},{},{},{} --定義表
> id=0
> for r=1,4 do
>> for c=1,3 do
>> if r+c <=5 then
>> R[id],C[id],T[id],W[id]=r,c,r+c-1,(1<<id); --賦值
>> print(R[id],C[id],T[id],W[id])
>> id=id+1
>> end
>> end
>> end
1       1       1       1
1       2       2       2
1       3       3       4
2       1       2       8
2       2       3       16
2       3       4       32
3       1       3       64
3       2       4       128
4       1       4       256

3.表的下標

> x={}
> x[1]=1
> x[2,2]=1
stdin:1: ']' expected near ','
> x={}
> x[{2,2}]=1 --用字面表做下標,可以賦值
> x
table: 00495ec0
> x[1]
nil
> x[{2,2}] --用字面表做下標,返回空值
nil
> x[2]
nil
> x[2]=x[2]+1 --空值不能做加法運算
stdin:1: attempt to perform arithmetic on a nil value (field '?')
stack traceback:
        stdin:1: in main chunk
        [C]: in ?
> x[2]=1
> x[2]
1
> a={1,2} --把字面表賦給一個變數
> a
table: 0049c508
> x[a]=1
> x[a]  --用變數表做下標,可以返回值
1
> x[{1,2}]
nil
> b=a --賦給另一個變數
> x[b]
1
> c --未定義的變數是空值
nil
> c=nil
> c==nil --空值可以做相等比較
true
> n==nil --未定義的變數也可以
true

4.表的遍歷和長度

> PW={}
> for s=1,id do --start
>> for e=1,id do --end
>> for m=1,id do --mid
>> if (R[s]==R[e] and C[e]-C[s]>1 and R[m]==R[s] and C[m]>C[s] and C[m]<C[e]) or
>>    (C[s]==C[e] and R[e]-R[s]>1 and C[m]==C[s] and R[m]>R[s] and R[m]<R[e]) or
>>    (T[s]==T[e] and R[e]-R[s]>1 and T[m]==T[s] and R[m]>R[s] and R[m]<R[e]) then
>> tm={s,e}
>> if PW[tm]==nil then
>> PW[tm]=(1<<m);
>> else
>> PW[tm]=PW[tm]+(1<<m);
>> end
>> end
>> end
>> end
>> end
> PW
table: 00495d58
> x={1,2}
> PW[x]
nil
> x={1,3}
> PW[x]
nil
> next(PW) --表中第一個值
table: 0049d688 32
> #PW --不是列表的表沒有長度
0
> print(next(PW))
table: 0049d688 32
Lua 5.3.3  Copyright (C) 1994-2016 Lua.org, PUC-Rio
> w={}
> id=0
> for r=1,4 do
>> for c=1,3 do
>> id=id+1
>> t={r,c} --t是臨時表
>> w[t]=id --每個作下標的表都是臨時的
>> end
>> end
>
> for r=1,4 do
>> for c=1,3 do
>> t={r,c}
>> print(t,w[t])
>> end
>> end
table: 0059fc78 nil  --重新建立的表,不是同一個
table: 0059fca0 nil
table: 0059fd68 nil
table: 0059a938 nil
table: 0059a9b0 nil
table: 0059aa78 nil
table: 0059ab40 nil
table: 0059ac30 nil
table: 0059acf8 nil
table: 0059ad98 nil
table: 00436e78 nil
table: 00436f18 nil
> w1={}
> t1={1,2}
> w1[t1]=10
> w1[t1]
10
> id
12
> t2=t1 
> t1=nil --作下標的物件後銷燬
> w1[t2] --還能訪問
10
> t2=nil --作下標的物件先銷燬
> t3={1,2}
> w1[t3] --不能訪問
nil

> w={}
> id=0
> for r=1,4 do
>> for c=1,3 do
>> id=id+1
>> t=r*10+c  --數字下標是持久的
>> w[t]=id
>> end
>> end
>
> for r=1,4 do
>> for c=1,3 do
>> t=r*10+c
>> print(t,w[t])
>> end
>> end
11      1
12      2
13      3
21      4
22      5
23      6
31      7
32      8
33      9
41      10
42      11
43      12

4.表必須通過賦給另一個表變數才能相等,常量表不等,帶有變數的也不等

r=1
c=3
print({r,c}~={1,3})
print({r,c})
a={r,c}
b={r,c}
print(a==b)
print({1,3}~={1,3})

輸出----
true
table: 0071ade0
false
true

相關文章