学习lua(一) 认识了解lua

lua 语句之间可以用分隔符也可以不用分隔符,LUA的语法中,代码中的换行不起任何作用

例如:一下四个程序块都是合法的,并且完全等价 

a=1

b=a*2

a=1

b=a*2

a=1; b=a*2

a=1 b=a*2  --有点难看,但却是合法的

用lua解释器解释lua脚本命令

% lua hello.lua

II 词法

Lua中的标识符可以是由任意字,数字和下划线构成的字符串,但不能以数字开头。

注意:应该避免使用以一个下划线开头并跟着一个或多个大写字母(例如:“_VERSION”) 的标识符,Lua将这类标识符保留用作特殊用途。

通常保留标识符“—”(一个下划线)作为“亚变量”使用。

Lua的保留字都有哪些呢?

and  break  do  else  elseif

end  false  for  function  if

in  local  nil  not  or

repeat  return  then  true  until

while

III 代码注释

  --行注释

  --[[......--]]  多行注释

IV.全局变量和局部变量

  在lua中默认变量都是全局变量,当需要局部变量的时候可以用关键字:local

  在lua中访问一个未初始化的变量不会引发错误,访问结果是一个特殊的值nil

    例如: print(b) --nil

   通常没有必要删除一个全局变量。如果一个变量只有较短的生存周期,那么就应该使用局部变量。

    但是如果一定要删除某个全局变量的话,只需要将其赋值为nil

2. 类型与值

  Lua是一种动态类型的语言。在语言中没有类型的定义的语法,每个值都携带了它自身的类型信息,也就可以这样理解

  你为这个变量赋予什么类型的值,那么这个变量就是什么类型的变量

  Lua中共有8种基础类型: nil (空), boolean,  number  string  userdata  function  thread  table(表)

  函数type可根据哦一个值返回其类型名称

  print(type("hello world"))   -->string

  注意:type(x) type的返回类型为string

  

  变量没有预定义的类型,任何变量都可以包含任何类型的值

  print(type(a)) --nil

  a=10

  a="a string!"

  print(type(a))

  a=print

  a(type(a)) -->function

  类型:Boolean :false/true  Lua将值false和nil视为“假” ,而将出此之外的其他值视为"真“。

  例子:

    a="one string"

    b=string.gsub(a,"one","another")  --修改字符串的一部分

    print(a)  -->one string

    print(b)  -->another string

    Lua的字符串和其他Lua对象(例如:table或函数等)一样,都是自动内存管理机制,所管理的对象。这表示无需担心字符串的分配和释放,Lua处理这些事情。一个字符串可以小到只包含一个字母,也可以大到包含整本书。Lua能够高效地处理长字符串。在Lua程序中操作100K或1M的字符串是很常见的。

    字符串的书写方式:a="a line"  b='another line'

    

  另外,还可以用一对匹配的双方括号来界定一个字母字符串,就像写"块注释” 那样。以这种形式书写的字符串可以延伸多行,Lua

  不会解释其中的转义序列。此外,如果字符串的第一个字符是一个换行字符,那么Lua会忽略它。这种写法对于书写那种含有程序

  代码的字符串尤为有用。如下列:

    page[[

      <html>

        <head>

        <title>An HTML Page</title>

        </head>

      <body>

        <a href="http://www.antknow.net">Lua</a>

      </body>

    </html>

  ]]

   2) 也可以用[===[ ....]===]    相同数量的等号,就可以在不加转义的情况下,直接嵌入任意的字符串内容了

    这套机制也同样适用于注释。例如,以“--[=[........]=] 如此便简化了注释那些”已经包含了注释块“的代码。

   3) Lua 提供了运行时的数字与字符串的自动转换。在一个数字字符串上,应用算术操作时,Lua会尝试将这个字符串转换成一个数字

    print("10"+1)   --> 11

    print("hello"+1)  -->错误,(不能转换“hello”)

   4) print(10 .. 20)   --》1020

      在lua中,“.."是字符串连接操作符。当直接在一个数字后面输入它的时候,必须用一个空格来分割他们。

    如今,人不能确定在lua的设计中,这些自动的强制转换是否算一项好的设计,建议,最好不要依赖他们。

    如果需要显示地讲一个字符串转换成数字,可以使用函数:tonumber.这个字符串的内容不能表示一个正确的数字时,tonumber将返回nil

    line=io.read() ----读取一行

    n=tonumber(line) ---尝试将他转换为一个数字

    if n==nil then error(line .. " is not a valid number")

    else 

      print(n*2)

    end

    5)  若要将一个数字转换成字符串,可以调用函数 tostring,或者将该数字与一个空字符串相连接:

      print(tostring(10)=="10")  -->true

      print(10 .. "" =="10")    --true

    6)  在lua 5. 中,可以在字符串前放置操作符”#" ,来获得该字符串的长度:

      a="hello"

      print(#a)  -->5

      print(#"good\0byte")  -->8

   2.5 table(表)

    table类型实现了”关联数组“。"关联数组” 是一种具有特殊索引方式的数组,可以用除了nil之外的任何类型来索引它。

    table没有固定大小,动态类

    Lua也是通过table来表示模块,包,和对象的。当输入io.read的时候,其含义是“io模块中的read函数”。对于Lua而言,这表示“使用字符串read作为key,来索引table io.

    table的创建是通过”构造表达式“完成的,最简单的构造表达式就是{}

    table永远是”匿名的“,一个持有table的变量与table自身之间没有固定的关联性

    当一个程序再也没有对一个table的引用时,Lua的垃圾收集器最终会删除该table,并复用它的内存

      当table的摸个元素没有初始化时,他的内容就为nil

    例如:

      a.x=10   --->等同于a["x"]=10

      print(a.x)  -->等同于print(a["x"])

    --打印所有的行

      for i=1, #a do

        print(a[i])

      end

    

    一下是几种,长度操作符在Lua中的习惯写法

    print(a[#a]) --->打印列表a的最后一个值

    a[#a]=nil  -->删除最后一个值

    a[#a+1]=v   -->将v添加到列表末尾

    另一种方法来读取一个文件的前10行

      a={}

      for i=1, 10 do

        a[#a+1]=io.read()

      end

    

    

  

原文地址:https://www.cnblogs.com/finger/p/2485469.html