Lua學習筆記(一)
構造一個空的table,接收終端的輸入
a={}
for i=1,5 do
a[i]=io.read()
end
#a可以獲取table a的最後一個元素的索引.遍歷table
for i=1,#a do
print(a[i])
end
清空最後一個元素
a[#a]=nil
獲取最後一個元素
print(a[#a])
追加元素
a[#a+1]="edmond"
選擇控制結構
if a<0 then a=0 end
if a
if line>MAXLINES then
line=0
end
if op=="+" then
r=a+b
elseif op=="-" then
r=a-b
else
。。。
end
迴圈控制結構
local i=1
while a[i] do
print(a[i])
i=i+1
end
使用者只要有輸入則顯示, ~= 等同於 !=
repeat
line=io.read()
until line~=""
print(line)
數字型for迴圈,三個引數分別是起始位置,終止位置和步長
for i=10,1,-1 do
print(i)
end
字元型for迴圈
days={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"}
for k,v in ipairs(days) do
print(k..","..v)
end
函式多值返回
function foo()
。。。
。。。
return "a","b" end
變長引數
function add(...)
local s=0
for k,v in ipairs{...} do
s=s+v
end
return s
end
print(add(1,2,3,4,5))
具名實參
當實參只有一個table構造時,函式呼叫的圓括號是可以省略的.
function getDatabaseInfo(arg)
print(arg.host)
print(arg.port)
print(arg.database)
print(arg.username)
print(arg.password)
end
getDatabaseInfo{
host="127.0.0.1",
port=3306,
database="mvbox",
username="xx",
password="xx"
}
閉包
function newCounter()
local i=0
return function()
i=i+1
return i
end
end
c1=newCounter()
print(c1())
print(c1())
c2=newCounter()
print(c2())
print(c1())
print(c2())
運算結果
[nginx@localhost~]$./lua_test.lua
1
2
1
3
2
非全域性函式
lib={}
lib.foo=function(x,y) return x+y end
lib.goo=function(x,y) return x-y end
print(lib.foo(3,2))
print(lib.goo(4,2))
或者
lib={
foo=function(x,y) return x+y end,
goo=function(x,y) return x-y end
}
print(lib.foo(3,2))
print(lib.goo(4,2))
還可以
lib={}
lib.foo=function(x,y) return x+y end
lib.goo=function(x,y) return x-y end
print(lib.foo(3,2))
print(lib.goo(4,2))
本地函式的遞迴
錯誤的方式
local fact=function(n)
if n==0 then return 1
else return n*fact(n-1)
end
end
fact(3)
在呼叫函式內遞迴的fact函式時,由於fact函式尚未定義完畢,所以報錯
進行如下處理
local fact
fact=function(n)
if n==0 then return 1
else return n*fact(n-1)
end
end
print(fact(3))
a={}
for i=1,5 do
a[i]=io.read()
end
#a可以獲取table a的最後一個元素的索引.遍歷table
for i=1,#a do
print(a[i])
end
清空最後一個元素
a[#a]=nil
獲取最後一個元素
print(a[#a])
追加元素
a[#a+1]="edmond"
選擇控制結構
if a<0 then a=0 end
if a
if line>MAXLINES then
line=0
end
if op=="+" then
r=a+b
elseif op=="-" then
r=a-b
else
。。。
end
迴圈控制結構
local i=1
while a[i] do
print(a[i])
i=i+1
end
使用者只要有輸入則顯示, ~= 等同於 !=
repeat
line=io.read()
until line~=""
print(line)
數字型for迴圈,三個引數分別是起始位置,終止位置和步長
for i=10,1,-1 do
print(i)
end
字元型for迴圈
days={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"}
for k,v in ipairs(days) do
print(k..","..v)
end
函式多值返回
function foo()
。。。
。。。
return "a","b" end
變長引數
function add(...)
local s=0
for k,v in ipairs{...} do
s=s+v
end
return s
end
print(add(1,2,3,4,5))
具名實參
當實參只有一個table構造時,函式呼叫的圓括號是可以省略的.
function getDatabaseInfo(arg)
print(arg.host)
print(arg.port)
print(arg.database)
print(arg.username)
print(arg.password)
end
getDatabaseInfo{
host="127.0.0.1",
port=3306,
database="mvbox",
username="xx",
password="xx"
}
閉包
function newCounter()
local i=0
return function()
i=i+1
return i
end
end
c1=newCounter()
print(c1())
print(c1())
c2=newCounter()
print(c2())
print(c1())
print(c2())
運算結果
[nginx@localhost~]$./lua_test.lua
1
2
1
3
2
非全域性函式
lib={}
lib.foo=function(x,y) return x+y end
lib.goo=function(x,y) return x-y end
print(lib.foo(3,2))
print(lib.goo(4,2))
或者
lib={
foo=function(x,y) return x+y end,
goo=function(x,y) return x-y end
}
print(lib.foo(3,2))
print(lib.goo(4,2))
還可以
lib={}
lib.foo=function(x,y) return x+y end
lib.goo=function(x,y) return x-y end
print(lib.foo(3,2))
print(lib.goo(4,2))
本地函式的遞迴
錯誤的方式
local fact=function(n)
if n==0 then return 1
else return n*fact(n-1)
end
end
fact(3)
在呼叫函式內遞迴的fact函式時,由於fact函式尚未定義完畢,所以報錯
進行如下處理
local fact
fact=function(n)
if n==0 then return 1
else return n*fact(n-1)
end
end
print(fact(3))
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29254281/viewspace-1849985/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Lua 學習筆記(上)筆記
- lua課程學習筆記筆記
- 熱更新語言--lua學習筆記筆記
- Lua學習記錄 20201027
- 學習筆記(一)筆記
- kitten 學習教程(一) 學習筆記筆記
- TS學習筆記(一)筆記
- unity學習筆記(一)Unity筆記
- oracle學習筆記《一》Oracle筆記
- ANFIS學習筆記(一)筆記
- Selenium 學習筆記 (一)筆記
- Kettle學習筆記(一)筆記
- Spring學習筆記(一)Spring筆記
- Matlab學習筆記(一)Matlab筆記
- opencv學習筆記(一)OpenCV筆記
- LaTeX學習筆記:一筆記
- GOLang 學習筆記(一)Golang筆記
- SpringMVC學習筆記(一)SpringMVC筆記
- Cesium學習筆記(一)筆記
- kafka學習筆記(一)Kafka筆記
- Angular 學習筆記(一)Angular筆記
- React 學習筆記【一】React筆記
- vue學習筆記一Vue筆記
- Canvas學習筆記(一)Canvas筆記
- Python 學習筆記(一)Python筆記
- Jquery學習筆記(一)jQuery筆記
- goLang學習筆記(一)Golang筆記
- Android學習筆記一Android筆記
- css學習筆記(一)CSS筆記
- SCSS學習筆記(一)CSS筆記
- 深度學習 筆記一深度學習筆記
- Redis學習筆記(三)使用Lua指令碼實現分散式鎖Redis筆記指令碼分散式
- 高等數學學習筆記(一)筆記
- 深度學習 DEEP LEARNING 學習筆記(一)深度學習筆記
- c#學習筆記(一)C#筆記
- Apache ShenYu 學習筆記一Apache筆記
- Apache Oozie學習筆記(一)Apache筆記
- MySQL學習筆記之一MySql筆記
- github--學習筆記(一)Github筆記