天天看点

lua(一)基本语法及数据类型

1.  lua -i或者lua进入lua控制台

[xuhaixing@localhost lua]$ lua -i
Lua 5.1.4  Copyright (C) 1994-2008 Lua.org, PUC-Rio
> 


[xuhaixing@localhost lua]$ lua
Lua 5.1.4  Copyright (C) 1994-2008 Lua.org, PUC-Rio
>      

2.打印输出

a.  控制台方式

> print("hello world")
hello world
>       

b.  文件方式

[xuhaixing@localhost lua]$ lua helloWorld.lua 
helloworld      

c.  ./执行

#!/usr/bin/lua
print("helloworld")      
[xuhaixing@localhost lua]$ chmod u+x hello.lua
[xuhaixing@localhost lua]$ ./hello.lua 
helloworld      

3.注释   

   a.单行注释

#!/usr/bin/lua
print("helloworld")
--print("world good")      
[xuhaixing@localhost lua]$ ./hello.lua 
helloworld      

   b.多行注释    

#!/usr/bin/lua
print("helloworld")
--print("world good")
--[[
print("嘻嘻哈哈")
print("你好")
--]]      

4. 没有声明的变量是全局变量,直接访问返回nil

> 
> print(b)
nil
> b = '1'
> print(b)
1
> local a = 1
> print(a)
nil
>      

5. lua数据类型 8种

    nil,boolean,number,string,userdata,function,thread,table

  a. nil   

> print(type(a))
nil      

   对于全局变量或者table, nil还有一个删除的作用

> table2 = {key1='a',key2='b',key3='c'}
> for k, v in pairs(table2) do print(k..'---'..v) end
key1---a
key3---c
key2---b
> table2.key1=nil
> for k, v in pairs(table2) do print(k..'---'..v) end
key3---c
key2---b      

   nil做比较时,需要加上引号    

> print(type(a))
nil
> print(type(a)==nil)
false
> print(type(type(a)))
string
> print(type(a)=='nil')
true      

b. boolean

   lua把nil和false 当作false,其他都是真  

> if false or nil then print('至少有一个是true')  else print("false 和nill 都为false") end
false 和nill 都为false
> if 'a' then print('至少有一个是true')  else print("false 和nill 都为false") end
至少有一个是true      

c. number

    双精度类型,lua种只有这一种数字类型

> print(type(2))
number
> print(type(2.0))
number
> print(type(2.0e+10))
number      

d. string字符串    

> print("aaa")
aaa
> print('aaa')
aaa
> print([[aaa]])
aaa      

  字符串做算术运算时,会尝试转换成数字   

> print('1'+'3')
4
> print('1'+3)
4
> print('1'+'a')
stdin:1: attempt to perform arithmetic on a string value
stack traceback:
  stdin:1: in main chunk
  [C]: ?      

  字符串连接   ..     

> print('1'..'2'..'a')
12a      

e. table

    table的下标从1开始    

> table1 = {'a','b','c'}
> for k, v in pairs(table1) do print(k..'---'..v) end
1---a
2---b
3---c      

    可以通过[] 下标访问   

> print(table1[1])
a      

  可以自己指定key  

> table2 = {key1='a',key2='b',key3='c'}
> for k, v in pairs(table2) do print(k..'---'..v) end
key1---a
key3---c
key2---b      

通过.下标访问  

> print(table2.key1)
a
> print(table2[key1])
nil      
function func1(n)
 if n==0 then
   return 1
 else
   return n * func1(n-1)
 end
end
print(func1(3))

func2=func1
print(func2(4))      
[xuhaixing@localhost lua]$ lua function.lua 
6
24      
[xuhaixing@localhost lua]$ cat function2.lua 
function testFun(table,fun)
  for k, v in pairs(tab) do
    print(fun(k,v))
  end
end

tab={key1="aaa",key2="bbb"};
testFun(tab,
  function(k,v)   --匿名函数
    return k.."--"..v
  end
)
[xuhaixing@localhost lua]$ lua function2.lua 
key1--aaa
key2--bbb