刚刚接触Lua语言,当然这里推荐看<<Programming in Lua>>原版或者中文版的书来学习。

Lua是一种很简洁的脚本语言,全部是用C语言实现,并且全部开源,可以对照着源码学习。

好了,正式开始:

1. 基本语法

学习语言总是从“Hello world” 开始:

Lua要打印一行文本很简单, print(“Hello world” )这一行代码即可,当然前提是你得配置好Lua的环境,相关资源有很多。

print是Lua的一个函数,类似Java中的println,打印参数中的内容后会直接换行。这里额外提一下:苹果刚推出的一门新语言Swift 特别像Lua,想学ios的如果有Lua基础就特别容易上手了。

Lua是一种动态语言,使用变量时不用声明其数据类型(即像C语言中的 int、float、char、double等等): 


x = 23
print (x)----->23
y = "string"
print (y) ----->string
x = y
print(x)  ------> string
print(z)  -------> nil

可以看出变量直接声明,没有指定数据类型,也可以直接使用,但输出的是nil,lua中没有声明过的变量都是nil。另外,Lua中直接声明的变量都是全局变量,并保存在_G表中,表(table)是Lua中唯一的一种数据结构,后面会详细学习。如果想要声明一个局部变量可以用local来修饰,局部变量只在当前程序块(chunk)中有效,这和其他语言原理是一样的。还可以看出,每行代码都没有结束符,像C中的分号(;),这是脚本语言通用的特性,如果把多行代码都写在一行,这时最好加上分号,当然不加也不会错,但失去可读性,而且看起来很ugly。当然,变量声明的规则和其他语言一样,也是只能以字母和下划线开头,不能使用关键字,但是最新的Lua 5.2 好像可以使用中文。swift支持utf编码来声明变量,也是可以用中文的,这很强大啊,给英文不好的同学带来福音了没啊!!

注意:Lua中的注释是用两个减号(--)代表单行注释,--[[ code ]]  代表多行注释。

2.数据类型与关键字

虽然变量声明时不用指定具体的数据类型,但是Lua中也有8种基础类型:nil、boolean、number、string、userdata、function、thread 和 table。可以用函数type来查看变量的具体类型,该函数返回的是string:


print(type(”hello world“) ) ---> string  
print(type(10.4*5))           ---> number (lua中用number表示实数,没有整型int,number能表示所有数字)
print(type(type) )      -----> function (type是系统函数)
print(type(print) )    -----> function (print也是系统函数)
print(type(true))       -----> boolean ( 布尔类型 有两种值 : true 和 false )
print(type(nil) )       -----> nil
print(type(a) )        -----> nil   (前面已经遇到了,没有声明过的变量都是nil)
print(type(type(X) )  -----> string (type本身会返回字符串)
print ( type( {} ) )        -----> table (table 是用{}来声明的,这里是一个空表)

注意:函数(function)也是一种数据类型,也就是说Lua中函数是作为”第一类值“来使用的,这样会给编程带来很大的灵活性。例如:


func1 =  function (arg1,arg2) 
   print(arg1,arg2)
end
local function fact(n) 
    if n == 0 then
       return 1
    else
       return n * fact( n-1 )
    end
end


可以看到,函数的定义灵活,还可以定义一个匿名函数 function (arg,...) print(arg1,。。。)   end , 参数是可变长的,传入多少参数就打印出多少。注意,函数定义完要以end 结尾, 这和 matlab中类似。

Lua中的string是不可变的,不像C语言中可以直接修改某个字符,只能根据需求重新创建一个新string,后面会学到用标准库中的gsub函数来实现。string也可以用单引号来声明,如:

a  = " a string"

b  = ' another string '

但是,编程中应该养成良好的习惯,把格式统一起来。另外,还有一些转义字符的情况,和其他语言类型,这里不作介绍。

string还有几个操作:求长度,字符串连接,字符串和number之间的转换。

求长度很简单,用一个井号(#)即可:a = "hello" ; print(#a) -----> 5  。 注意:当字符串是字面值作为函数的参数时可以不用括号,这是Lua的语法糖。

字符串连接是用两个点(.. )来实现的,如:print(”hello“ .. ”world“) 可以把hello和world连接起来,很简单吧!

和number之间的转换:tonumber(str) 可以把字符串转成数字,前提是str中全是数字;tostring(num)可以把数字转成string

Lua中最重要的类型就是table,它是实现其他数据结构和面向对象概念的基础。

a = {}  ---> 定义了一个空表, 这里是构造表达式

a["x"] = 10   ---> 添加一条记录,table的索引可以用除了nil 其他所有类型,但Lua中下标是从1开始的,这和其他高级语言是不同的。

b = { 10,20, "one" = "xp", "two" = "win7", "three" = "mac"}    ---> 没有指定下标的就从1开始,这时可以简便调用table中的值:b.one 可以得到”xp“

Lua中的关键字(保留字)一共21个,后面会陆续遇到: and,break,do,else,elseif,end,false,for,function,if,in,local,nil,
not,or,repeat,return,then,true,until,while。

今天先到这里,明天继续。