lua基本javascript
lua的下載php
http://luabinaries.sourceforge.net/
點擊所要下載的版本
好比我下的是5.3.3
https://sourceforge.net/projects/luabinaries/files/5.3.3/
下載windows下二進制文件
lua-5.3.3_Win32_bin.ziphtml
解壓完後java
在同目錄下創建test.luapython
print("hello lua");for i=1,10,2 do print(i)end
執行ajax
E:\lua>lua53 test.lua hello lua13579
View Codewindows
for i=起始值,結束值,步長
步長能夠省略 默認是1數組
lua的值和類型php7
字符串和布爾ide
test.lua
a="abc"b=falsec=trued='ds'e=3.1415926print(a,b,c,d,e);
E:\lua>lua53 test.lua
abc false true ds 3.1415926
lua的比較操做符
操做符 |
說明 |
== |
比較兩個操做數的類型和值是否都相等 |
~= |
與==結果相反 |
--數字操做符的操做數若是是字符串會自動轉換成數字a=1+1b=1+'1'--c=1+'c' 出錯print(a,type(a),b,type(b),a==b) --2 number 2.0 number true--比較操做符不一樣於數學操做符,不會對操做數的類型自動轉換print(1=='1') --falseprint({'a'}=={'a'}) --falseprint(tonumber('F',16)) --15
lua中的table
table=數組+映射
lua中單行註釋 --
塊註釋
--[[
]]
數組
數組的下標識從1開始的而不是0
數組的下標必須連續,否者就是映射了
a={10,20,"lua"}--[[或者 a={} a[1]=10 a[2]=20 a[3]="lua"]]print(a[1],a[2],a[3]);
E:\lua>lua53 test.lua
10 20 lua
映射
a={ ["key1"]=10, [2]=false}--[[或者 a={} a['key1']=10 a[2]=false]]print(a.key1,a[2]);
lua函數
函數的調用必須在聲明的後面(代碼的位置順序)
test.lua
function add(a,b) return a+bendadd1=function ( a,b) return a+bendprint(add(1,2))print(add1(1,2))
E:\lua>lua53 test.lua
3
3
函數的多返回值
function add(a,b) return a+b,a-b,a*bendr=add(2,5);print(add(2,5))print(r,type(r));
E:\lua>lua53 test.lua
7 -3 10
7 number
能夠在Lua中建立一個具備可變參數的函數...做爲它的參數
function average(...) result = 0 local arg={...} for i,v in ipairs(arg) do result = result + v end return result/#argendprint("The average is",average(1,2,3,4,5,6))
E:\lua>lua53 test.lua
The average is 3.5
多變量的賦值和值的交換
a,b=1,2print(a,b) a,b=b,aprint(a,b) c,d=1print(c,d) e,f=1,2,3print(e,f) g,h=1,print(g,h)
E:\lua>lua53 test.lua1 22 11 nil1 2nil nil
多重賦值時,lua會先計算全部表達式的值
local a= {1,2,3}local i=1i,a[i]=i+1,5print(i) --2for k1,v1 in ipairs(a) do print(k1,v1)end--[[2 1 5 2 2 3 3]]
lua計算完全部表達式的值後,上面最後一個賦值語句成爲
i,a[1]=2,5
lua的表達式邏輯操做符
只要操做數不是nil或者false,邏輯操做符就認爲操做數爲真
操做符 |
說明 |
not |
根據操做數的真假相應的返回false和true |
and |
a and b 中a 爲真返回b,否者返回a |
or |
a or b中a是假則返回a ,否者返回b |
print(1 and 5) --5print(1 or 5) --1print(not 0) --falseprint(not 1) --falseprint('' or 1); --''
print(true and false)print(true and true)print(true or false)print(not true)print(not false)--字符串拼接print("hello".." world");
E:\lua>lua53 test.luafalsetruetruefalsetruehello world
View Code
做用域
function fun() a=1 local b=2endfun()print(a,b)
E:\lua>lua53 test.lua1 nil
local x = 10if true then local x=x+1 print(x) do local x=x+1 print(x) end print(x)endprint(x)--[[執行結果 11 12 11 10]]
lua的流程控制
if elseif
a=1if(a>1) then print("a>1")elseif(a<1) then print("a<1")else if(a==1) then print("a=1") else print("a is not num") endend
a必須是數字,否者不能參與比較
elseif不能夠寫成else if lua裏沒i++
while
local i=0while i<10 do print(i) i=i+1end
repeat
statement(s)
until( condition )
i=1repeat print(i); i=i+1until(i>5)
for循環
for i=起始值,終點值,步長
步長能夠省略 默認是1
for i=1,10 do print("i="..i)endfor j=1,10,2 do print("j="..j)end
E:\lua>lua53 test.lua i=1i=2i=3i=4i=5i=6i=7i=8i=9i=10j=1j=3j=5j=7j=9
View Code
for的泛型遍歷
迭代器
pairs() 遍歷table裏的全部元素
ipairs() 只遍歷數組(必須1開始的鍵 並且必須連續)
迭代器 http://www.cnblogs.com/HKUI/articles/6757372.html
a={ ['a']='ajax', [100]=true, [1]=1, [2]=3}for k,v in pairs(a) do print(k,v)endprint("----------------------")for k1,v1 in ipairs(a) do print(k1,v1)end
2次運行,對於pairs順序徹底是沒有保障的 E:\lua>lua53 test.lua100 true1 12 3a ajax----------------------1 12 3E:\lua>lua53 test.lua100 truea ajax2 31 1----------------------1 12 3
View Code
a={ ['a']='ajax', [99]=999, [100]=true, [2]=3}for k,v in pairs(a) do print(k,v)endprint("----------------------")for k1,v1 in ipairs(a) do print(k1,v1)end
E:\lua>lua53 test.lua a ajax100 true2 399 999
二維或多維數組
arr={ {'a','b','c'}, {'aa','bb','cc'}, {['a']='ajax'} }for k,v in pairs(arr) do for k1,v1 in pairs(v) do print(k..'-'..k1,v1) endend
E:\lua>lua53 test.lua1-1 a1-2 b1-3 c2-1 aa2-2 bb2-3 cc3-a ajax
View Code
lua裏的包
同目錄下有 foo.lua,test.lua
foo.lua
local class={}function class.foo( a,b ) return a+bendreturn class
test.lua
local c=require("foo")print(c);print(c.foo(1,2))for i=1,2 do print(require("foo"))endprint("-------------")for i=1,2 do print(dofile("foo.lua"))end
E:\lua>lua53 test.lua table: 000387983table: 00038798table: 00038798-------------table: 0003bcf8 table: 0003bcd0
View Code
require與dofile
require運行屢次 ,對於同一個table 只加載一次
dofile運行屢次,對於同一個table,每次都是從新加載
lua的系統庫
local t={}for i=1,5 do table.insert(t,i..'_'..i)endfor k,v in pairs(t) do print(k..'='..v)endprint("----------");table.remove(t,2)for k,v in pairs(t) do print(k..'='..v)endfor k,v in pairs(table) do print(k,v)end
運行
E:\lua>lua53 test.lua1=1_12=2_23=3_34=4_45=5_5----------1=1_12=3_33=4_44=5_5 sort function: 62995870move function: 62995940insert function: 62995e00remove function: 62995c40 pack function: 62995160concat function: 62995fa0unpack function: 62994fc0
View Code
對於映射的刪除需用賦值nil
local t={} t.a="ajax"t.b="bbc"for k,v in pairs(t) do print(k,v)endtable.remove(t,a)print("------------");for k,v in pairs(t) do print(k,v)endprint("---------") t.a=nilfor k,v in pairs(t) do print(k,v)end
執行
E:\lua>lua53 test.lua a ajax b bbc------------a ajax b bbc---------b bbc
View Code
數組長度和字符串長度
local t={ ['a']="ajax", ['b']="bbc", [1]=11, [2]=222}print("t len= "..#t);local t1={1,2,3,4}print("t1 len= "..#t1)local str="php7"print("str len= "..#str)
E:\lua>lua53 test.lua t len= 2t1 len= 4str len= 4
tonumber,tostring
string.format() 相似c中printf
a="3.14"print(a,type(a)); a=tonumber(a)print(a,type(a)); b=3.1415print(b,type(b)) b=tostring(b)print(b,type(b)) person="tom"print(string.format("hello %s",person))
E:\lua>lua53 test.lua3.14 string3.14 number3.1415 number3.1415 string hello tom
lua字符串操做
1.單引號之間的字符
2.雙引號之間的字符
3.[[]]
test.lua str1='php'str2="javascript"str3=[[php7]]str4="php \" best\" "str5='php "best"'str6=[[php "best"]]print("str1="..str1)print("str2="..str2)print("str3="..str3)print("str4="..str4)print("str5="..str5)print("str6="..str6) E:\lua>lua53 test.lua str1=php str2=javascript str3=php7 str4=php " best"str5=php "best"str6=php "best"
字符串操做方法
for k,v in pairs(string) do print(k)endE:\lua>lua53 test.lua gsub gmatch match len byte char lower sub format upper dump rep findunpackpacksize pack reverse
test.lua s="php5 pHp7"lower_s=string.lower(s) upper_s=string.upper(s) gsub=string.gsub(s,'php','python') reverse=string.reverse(s) rep=string.rep('p',3)print("lower_s="..lower_s)print("upper_s="..upper_s)print("gsub="..gsub)print("reverse="..reverse)print("rep="..rep) E:\lua>lua53 test.lua lower_s=php5 php7 upper_s=PHP5 PHP7 gsub=python5 pHp7 reverse=7pHp 5php rep=ppp