lua进阶(一)

第一章 概览

    1、chunks

             chunks是一系列语句, lua执行的每一块语句,比如一个文件或者交互模式下的每一行都是一个chunks。

     2、全局变量

            全局变量不需要声明,给一个变量赋值后即创建了这个全局变量,全局变量的初始值为

print(b) -->nil

b = 10

print(b) -->10

    3、词法约定

       Lua保留字

and   break  do  else  elseif

end   false  for   function  if

in  local  nil   not   or

repeat  return  then  true  until

while

  Lua是大小写敏感的。

  注释: 单行注释: --

多行注释: –[[ –]]

--[[

-- comment

--]]

   4、命令行方式

 

 

 

第二章 类型和值

  Lua是动态类型语言,变量不要类型定义。 Lua中有8个基本类型:nil、boolean、 number、

   string、userdata、function、thread、和table,函数type可以测试变量或者值的类型

    1、Nil lua的特殊类型, 只有一个值 nil

    2、Booleans  取值false true

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

    4、Strings 指字符的序列。lua是8位字节,所以字符串可以包含任何数值字符,包括嵌入的0。

          string和其他对象一样,Lua自动进行内存分配和释放

         可以使用单引号或者双引号表示字符串

a = "a line"

b = 'another line‘

        转义

\a bell 

\b back space   -- 后退

\f form feed  -- 换页

\n newline   -- 换行

\r carriage return    -- 回车

\t horizontal tab   -- 制表

\v vertical tab 

\\ backslash  -- "\" 

\" double quote     -- 双引号

\' single quote     -- 单引号 

\[ left square bracket   -- 左中括号

\] right square bracket  -- 右中括号

例子:

> print("one line\nnext line\n\"in quotes\", 'in quotes'") 

one line 

next line 

"in quotes", 'in quotes' 

> print('a backslash inside quotes: \'\\\'') 

a backslash inside quotes: '\' 

> print("a simpler way: '\\'") 

a simpler way: '\'

5、Functions

     函数是第一类值(和其他变量相同),意味着函数可以存储在变量中,可以作为函数
    的参数,也可以作为函数的返回值。

6、Userdata and Threads

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

 

第三章  表达式

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

  1、算数运算符

    二元运算  + – * / ^ (幂)

    一元运算 –(负值)

  2、关系运算

     <   >     <=    >=   ==      ~=

  3、逻辑运算

     and  or  not

  4、连接运算

     .. --两个点

print("Hello ".. "World")  --> Hello World 

print(0 .. 1)  --> 01

  5、优先级

    从高到低的顺序:

^ 

not - (unary) 

*  / 

+  - 

.. 

< > <= >= ~= == 

and 

or

  6、表的构造

    构造器是创建和初始化表的表达式,{}构建一个空表,

    可以直接初始化数组

    构造函数可以使用任何表达式初始化

    构造结构体  record

days = {"Sunday", "Monday", "Tuesday", "Wednesday", 

        "Thursday", "Friday", "Saturday"} 

        

tab = {math.sin(1), math.sin(2), math.sin(3), math.sin(4), 

        math.sin(5),math.sin(6), math.sin(7), math.sin(8)} 

        

for k, v in pairs(days) do

    print(v)

end



for k, v in pairs(tab) do

    print(v)

end



--record

a ={x = 23,y= 39} -- a ={} a.x = 0 a.y=0

print(a.x,a.y)

  第四章  基本语法

    1、赋值语句

          赋值是改变一个变量的值和改变表域的最基本方法

a = "hello".."world"

t ={n=2,m=0}

t.n = t.n + 1



x = 3

a,b = 10, 2 * x

print(a,b)

  2、局部变量与代码块(block)

使用local创建一个局部变量,与全局变量不同,局部变量只在被声明的那个代码块
内有效。代码块:指一个控制结构内,一个函数体,或者一个chunk(变量被声明的那
个文件或者文本串)。

x = 10 

locali = 1     -- local to the chunk 

whilei<=x do

localx = i*2   -- local to the while body 

print(x)  --> 2, 4, 6, 8, ... 

 i = i + 1 

end 

ifi > 20 then

localx  -- local to the "then" body 

 x = 20 

 print(x + 2) 

else 

print(x)  --> 10 (the global one) 

end 

print(x)  --> 10 (the global one)

  3、控制结构语句

   条件控制

print("enter a number")

n = io.read("*number")

if n > 0 then

    print(n.." bigger than zero")

elseif n > 100 then

    print(n.." bigger than 100")

else

    print(n.." smaller than zero")

end  -- remember the end

  循环控制

n = 3



while n > 0 do

    print(n)

    n = n - 1

end



n  = 3

repeat

    print(n)

    n = n -1

until n < 0



m = 0

for i = 1, 10, 1 do

    m = m + i

    print(i * m)

end

范型for循环

month ={"Jan","Feb","Mar","Apr","May","Jun",

    "Jul","Aug","Sep","Oct","Nov","Dec"}

for k,v in pairs(month) do

    print(k,v)

end



for k,y in ipairs(month) do

    print(k,month[k])

end
    break和return

break语句用来退出当前循环(for,repeat,while)。在循环外部不可以使用。
return 用来从函数返回结果,当一个函数自然结束结尾会有一个默认的return。(这
种函数类似pascal的过程)

n = 3

while 1 > 0 do

    print(n)

    n = n - 1

    if n < 0 then

        break

    end

end



function max(x,y)

    if x > y then

        return x

    else

        return y

    end

end



print(max(23,0))

你可能感兴趣的:(lua)