您好,登录后才能下订单哦!
lua是一款小巧的脚本语言,是巴西里约热内卢天主教大学里的一个研究小组于1993年开发其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。lua由标准C编写而成,几乎在所有操作系统和平台上都可以编译、运行。lua并没有提供强大的库,这是由它的定位决定的,所以lua不适合作为开发独立应用程序的语言,在游戏开发等领域使用较多。
保留字的概念不用多说,lua
中的保留字如下21个:
and break do else elseif end false for function if in local nil not or repeat return then true until while
注释分为行注释和块注释:
-- 行注释 -- print("the line notes") -- 块注释 --[[ print("the first block notes") print("the second block notes") ]]
使用块注释时,建议用如下形式:
--[[ print("the first block notes") print("the second block notes") --]]
这种形式的好处是,如果想要取消块注释,只需在块注释开始前再加一个-
符号,如此可以将块注释的开始行和结束行都变为行注释:
---[[ print("the first block notes") print("the second block notes") --]]
这里还要提到的一点是,如果在被注释的内容中出现]]
的解决方法。在lua
5.1版本后,可以通过在两个相连的中括号间添加相等数量的=
来解决,如此便可在注释内容中使用]]
:
--[===[ print("the first block notes") print("the second block notes") [[ ]] --]===]
和shell
,python
一样,在lua
中也有shebang,放于.lua
文件的第一行,如果改文件有执行权限,则可以直接执行:
#!/bin/bash #!/usr/bin/env lua
lua
中共有8种基础类型:
nil boolean number string userdata function thread table
nil即为空,相当于python
中的None和JavaScript
中的undefined/null,比较简单;userdata为自定义变量,thread与多线程、并发有关,这两种变量不必在初学阶段做过多纠结,下面我们主要看看number,boolean,string,table和function。
内置的type()
函数可以返回变量或值的类型:
print(type(nil)) --nil print(type(true)) --boolean print(type(12.2)) --number print(type("hello")) --string print(type(print)) --function print(type(type(nil))) --string 此处无论type中的是何值,print出的都是string,因为type()的返回值是string类型
lua
中没有像C/C++/Java中的整型(int/Integer),所有的数字均为双精度浮点数(double/Double)。在lua
中可以使用科学计数法表示数字常量,下面几种写法都是允许的:
4 3.1 6.6e+5 2.5e-3
lua
中的boolean值和python
和JavaScript
中的boolean有些区别。在python
和JavaScript
中,None/null,空字符串和数字0在逻辑判断中都会转换为false,而在lua
中,空字符串和数字0在逻辑判断中都会转换为true,只有nil在逻辑判断中都会转换为false:
if "" and 0 then print(true) else print(false) end --[[ 输出结果为true --]]
lua
中的字符串是不可变量,这和python
中相同,与C/C++/Java中不同。与python
和JavaScript
一样,lua
中既可以使用单引号'
,也可以使用双引号"
来声明字符串:
stringA = "This is string A" stringB = 'The string B'
lua
中也有转义字符,如定义一个分为两行的字符串:
stringTwoLine = "This is the first line.\nThe second line."
在lua
中,可以使用一对匹配的` `
来界定一个字符串,如果此时该字符串的第一个字符是换行符,该换行符将会被lua
忽略,此外在该字符串中所有的转义字符如\n
\t
等都会被忽略,即所有的转义字符在` `
内失效。该用法通常用来书写含有代码的字符串:
indexPage = [[ <html> <head> <title>HTML Title</title> </head> <body> <div>Hello World</div> </body> </html>]] print(indexPage)
与其他大多数编程语言不同,lua
中不能使用+
来连接字符串,而要用..
来进行连接:
> print("hello" + " world") stdin:1: attempt to perform arithmetic on a string value stack traceback: stdin:1: in main chunk [C]: ? > print("hello".." world") -- 输出结果hello world
lua
中计算字符串长度有些新奇,这里对比python
和JavaScript
来看一下,方便加深印象:
len('helloworld') # python 'helloworld'.length // JavaScript #'helloworld' -- lua
lua
中有两个内置函数tonumber()
、tostring()
用于将string转换为number及将number转换为string,在转换失败时不会抛出异常,而是将其转换为nil:
tonumber('1.173') -- 1.173 tonumber('hello') -- nil tostring(3.14159) -- '3.14159'
table是lua
中仅有的数据结构机制。table非常类似于python
中的dict,只要hashable的值均可作为key的,可以简单的认为string和number均可作为key,如:
dataTable, newTable = {}, {} -- 初始化table dataTable["name"] = "jiagoushi" -- 赋值,key="name",value="jiagoushi" print(dataTable["name"]) -- 取值,值为"jiagoushi" print(dataTable.name) -- 另一种取值方式,值为"jiagoushi" dataTable[1] = 233 print(dataTable[1]) -- 取值,值为233 dataTable[2.2] = "Beijing" print(dataTable[2.2]) -- 取值,值为"Beijing" print("dataTable的长度为 " .. #dataTable) -- 与取string长度相同,#也可以用来取table的长度 for i = 1, 10 do newTable[i] = i * 2 end for j = 1, #newTable do -- 循环输出该table中的值 print("newTable[" .. j .. "] = " .. newTable[j]) end
关于lua
中table的key值,如果使用整数的话,通常会以1作为起始值,这点与绝大多数编程语言习惯从0开始不同,因为lua
中有不少机制依赖该惯例,因此应该多加注意。
与python
和JavaScript
相同,在lua
中,函数被视为第一类值,可以被自由传递。看一下函数的基本用法:
-- 函数定义,有一个形参name function sayHello(name) print("Hello, " .. name) end -- 函数调用 sayHello("Li Lei") -- "Hello, Li Lei" sayHello("Han Meimei") -- "Hello, Han Meimei"
有关函数的高阶内容,放到之后的博客中继续讲解,敬请关注。
完。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。