此外,函式本身也是乙個變數,比如:
dp@dp:~ % cat test.lua
local mylen={}
mylen.len3=function (x,y,z)
return math.sqrt(x*x+y*y+z*z)
endmylen.len2=function (x,y)
return math.sqrt(x*x+y*y)
endprint(mylen.len2(10,9))
print(mylen.len3(10,9,-9))
dp@dp:~ %
dp@dp:~ % lua test.lua
13.453624047074
16.186414056239
dp@dp:~ %
可以定義閉包,將乙個函式寫在另乙個函式之內,定義在內部的函式可以訪問外部函式的區域性變數,lua中稱之為closure:
dp@dp:~ % cat test1.lua
function mysum(i)
local sums=0
return function()
sums=sums+i
return sums
endend
my_sum=mysum(2)
print(my_sum())
print(my_sum())
print(my_sum())
my_sum=mysum(9)
print(my_sum())
print(my_sum())
print(my_sum())
dp@dp:~ % lua test1.lua24
691827
dp@dp:~ %
可以使用loadfile與dofile將整個lua**做為函式來執行:
> dofile("test1.lua")24
691827
> dofile("test.lua")
13.453624047074
16.186414056239
> myf=loadfile("test.lua")
> myf()
13.453624047
07416.186414056239
也可以通過loadstring定義一段語句
然後將這段語句做為乙個函式執行
> myf=loadstring("x=x*2")
> x=10
> myf()
> print(x)
20> myff=loadstring("x=io.read();x=x+2;print(x)")
> myff()www.tygj123.com
234236
檢查條件,觸發錯誤
dp@dp:~ % cat mysum.lua
mysum=0
while true do
print("請輸入乙個數(輸入0退出計算)")
num=assert(io.read("*number"),"非數字輸入")
print(num)
if num==0 then break end
enddp@dp:~ %
dp@dp:~ % lua mysum.lua
請輸入乙個數(輸入0退出計算)
asdf
lua: mysum.lua:4: 非數字輸入
stack traceback:
[c]: in function 'assert'
mysum.lua:4: in main chunk
[c]: in ?
dp@dp:~ %
或mysum=0
while true do
print("請輸入乙個數(輸入0退出計算)")
num=io.read("*number")
if not num then error("非數字輸入") end
print(num)
if num==0 then break end
end執行後,輸入非數字會觸發錯誤而退出
dp@dp:~ % lua mysum1.lua
請輸入乙個數(輸入0退出計算)
1342
1342
請輸入乙個數(輸入0退出計算)
asflua: mynum1.lua:5: 非數字輸入
stack traceback:
[c]: in function 'error'
mynum1.lua:5: in main chunk
[c]: in ?
dp@dp:~ %
也可使用pcall呼叫可能發生錯誤的函式,然後進一步處理錯誤
my_sum=0www.yztrans.com
function mysum()
while true do
print("請輸入乙個數(輸入0退出計算)")
num=io.read("*number")
if not num then error("非數字輸入") end
if num==0 then break end
my_sum=my_sum+num
endend
if pcall(mysum) then
print("計算完畢,累加結果:"..my_sum)
else
print("只能輸入數字,程式異常退出!")
print("累加結果:"..my_sum)
enddp@dp:~ % lua mysum.lua
請輸入乙個數(輸入0退出計算)
234請輸入乙個數(輸入0退出計算)
-324
請輸入乙個數(輸入0退出計算)
88請輸入乙個數(輸入0退出計算)
123請輸入乙個數(輸入0退出計算)
0計算完畢,累加結果:121
dp@dp:~ % lua mysum.lua
請輸入乙個數(輸入0退出計算)
234請輸入乙個數(輸入0退出計算)
-11請輸入乙個數(輸入0退出計算)
233請輸入乙個數(輸入0退出計算)
88請輸入乙個數(輸入0退出計算)
asdf
只能輸入數字,程式異常退出!
累加結果:544
Lua遊戲指令碼語言入門(一)
lua 的語法比較簡單,學習起來也比較省力,但功能卻並不弱。在lua中,一切都是變數,除了關鍵字。請記住這句話。前言.開發環境搭建 lua執行器 i.首先是注釋 寫乙個程式,總是少不了注釋的。在lua中,你可以使用單行注釋和多行注釋。單行注釋中,連續兩個減號 表示注釋的開始,一直延續到行末為止。相當...
Unity中預覽lua指令碼
unity中選中指令碼後,右側的inspector可以看到指令碼的文字資訊,但是lua作為一種文字卻並不能被unity識別從而產生預覽效果,如圖 c 指令碼預覽效果 lua指令碼預覽效果 此時要想產生類似的效果,需要自己手動編寫 來實現,很簡單,直接上 using unityengine using...
Redis中快取Lua 指令碼
為什麼要快取 在指令碼比較長的情況下,如果每次呼叫指令碼都需要把整個指令碼傳給redis 服務端,會產生比較大的網路開銷。為了解決這個問題,redis 提供了evalsha 命令,允許開發者通過指令碼內容的sha1 摘要來執行指令碼。如何快取 redis 在執行script load 命令時會計算指...