《Lua程序设计》笔记之一——语言篇

1. Lua 是一个小巧而简单的语言。

Lua很容易与传统的C/C++整合,Lua以来C语言完成性能,底层操作以及第三方软件的接口。Lua提供了C所不擅长的,高级语言,动态结构,简洁,抑郁测试与调试。

Lua是一种易于扩展的语言,也是一种易整合语言。

Lua特点:

可扩展性:Lua扩展性很好,可以通过Lua代码或C代码扩展,Lua很多功能通过外部库来扩展。

简单: Lua本身简单,小巧,内容少但功能强大,易于实现小的应用。

高效:Lua有很高的执行效率

与平台无关:几乎可以运行在所有的系统上,Lua不是通过条件编译实现平台无关,完全使用ANSI C,只要有ANSI C编译器就可以编译并使用Lua。

 

Lua应用场景:

       使用Lua嵌入在应用程序中。

       作为一种独立运行的语言,用于文本处理或者只运行一次的小程序

       使用其他语言开发,把Lua当做库使用,使用C语言开发,但使用Lua简历简单灵活易于使用的接口

 

2. 起点

print("Hello World");
 
function fact(n)
       if n == 0 then
              return 1;
       else
              returnn*fact(n-1);
       end
end
 
print("enter a number:");
a = io.read("*number");
print(fact(a));
 
5
Hello World
enter a number:
120

       Lua中的Chunks,交互模式下,一般是一行为一个Chunk,还可以是一个函数,MByte的Chunk也很常见。

      

       全局变量:全局变量不需声明,给一个变量赋值即创建这个全局变量,没有初始化的全局变量初始化为nil

       and  break do  else  elseif end  false  for function  if  in local  nil  not or  repeat  return then  true  until while

       Lua大小写敏感,单行注释 --   多行注释–[[ --]]

      

       --[[

              print(10)    -- no action(comment)

       --]]

      

       命令行方式:  lua [options] [script [args]]

      

       prompt>lua –e “print(math.sin(12))”  à

      

       全局变量里面存储了命令行参数,

 

3. 类型和数值

       Lua是动态类型语言,变量不要类型定义。8个基本类型为:nil,boolean,number,string,userdata,function,thread,table。

       type可以测试给定变量或值得类型:

       print(type(“Hello world”))

       print(type(10.4 * 3))

       print(type(print))

       print(type(type))

       print(type(true))

       print(type(nil))

       print(type(type(X)))

      

       Nil是Lua中特殊的类型,全局变量没有被赋值以前默认为nil。

       Booleans可以取false和true,可以作为条件。在控制结构中,除了false和nil为假以外,其他都为真,包括0和空串为真

       Numbers表示实数,Lua中没有整数。

       Strings指字符的序列。Lua是8位字节,字符串可以包含任何字符,但是Lua中字符串不可以修改,只能创建一个新的变量存放字符串。可以使用单引号或者双引号表示字符串

       a= “a line”

       b= ‘anthor line’

       为了统一风格使用一种,当表示嵌套时才使用两种,对于含有引号情况使用转义符\

       \a bell \b  后退   \f  换页  \n  换行  \r 回车 \t 制表符  \’ 单引号  \” 双引号

       [[… ]]表示字符串,可以包含多行,也可以嵌套不会解释转义序列。

      

       Lua会在string和numbers之间自动进行类型转换,使用算术操作符,string自动转为数字。

       print(“10” + 1)    print(“10 + 1”) print(“-5.3e-10” * “2”)

       “..”在Lua中是字符串连接符,其前后最好加空格,防止解释错误。

      

n = tonumber(line)

if n == nil then

       error( line .. "isnot a valid number");

else

       print( n * 2);

end

       数字与字符串之间的转换: tonumber()   tostring()

       Functions函数式第一类值,意味着函数可以存储在变量中,可以作为函数的参数,也可以作为返回值。

       Lua可以调用lua或C实现的函数,Lua所有标准库都是用C实现的,标准库包括string库,table库,I/O库,OS库,算术库以及debug库。

       Userdata和Threads:userdata可以将C数据存放在Lua变量中,userdata在Lua中除了赋值和相等比较外没有预定义的操作。Userdata用来描述应用程序或使用C实现的库创建的新类型。

 

4. 表达式:

       Lua中表达式包括数字常量,字符串常量,变量,一元和二元运算符,函数调用以及非传统的函数定义和表构造。

       算术运算符: +  - *  /  ^

       关系运算符: <  > <=  >=  ==  ~=

       其中,nil只和自己相等,对于tables,userdata和functions的比较,仅当两者表示同一个对象时相等。

       逻辑运算符:and  or  not

       逻辑运算符认为false和nil为假,其他的都为真,0也是true。

       and和 or的运算都是运算截断的,对于and,只要前面式子为假,则不计算后面式子,对于or则是相反,只要第一个参数为真,不再计算第二个参数。

       C语言的三元运算符:a ? b: c 可以用这个语句实现: (a and b) or c;

       链接运算符: .. 连接两个字符串

      

       运算符的优先级:

       ^

       not  - (unary)

       *   /

       +   --

       ..

       <  > <=  >=  ~=  ==

       and

       or

      

表的构造:

       构造器是创建和初始化表的表达式,表是Lua特有的功能强大的东西。{}构造空表,可以初始化数组:days={“Sunday”, “Mondy”,“Tuesday”, “Wednesday”, “Thursday”}

       初始化表为record: a = { x = 0, y = 0}

       不管用何种方式创建table,可以向表中添加或者删除任何类型的域,构造函数仅影响表的初始化。

       创建一个链表:

       list= nil

       forline  in io.lines() do

              list= { next = list, value = line};

       end

       这样就创建了一个链表。

       一个构造函数中可以混合列表风格和record风格进行初始化:

       polyline= { color = “blue”, thickness = 2, npoints = 2,

              {x = 0, y = 0}

              {x = -10, y = 0}

              {x = -100, y = 1}

              {x = 0, y = 1}

       }

       另一种更一般的初始化方式,用[expresson]显示的表示将被初始化的索引:

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值