lua語法基本

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
相關文章
相關標籤/搜索