基础概念
程序块 (chunk)
定义
<code>a = 1b = a * 2a = 1;b = a * 2a = 1; b = a * 2a = 1 b = a * 2/<code>
一个程序块可以仅包含一条语句,也可以由多条不同的语句或函数的定义构成
当使用任何参数直接运行解释器时会看到这样得提示符
<code>Lua 5.1.5 Copyright (C) 1994-2012 Lua.org Puc-Rio>/<code>再这种模式下输入得每条命令都将立即被执行要退出交互模式和解释器可以调用操作系统库的 exit 函数,输入 os.exit()或者 end-of-file 控制字符,在 DOS/Windows 中是
但将多行内容放入文件中才是更常见的做法
<code>-- fact.lua 阶乘文件function fact(n) if n == 0 then return 1 --0的阶乘是1 else return n * fact(n - 1) --输入3会执行 3 * 2 * 1 endendprint("Enter a number:")a = io.read("*number")print(fact(a))/<code>
-i 参数
通过 -i 参数来启动解释器lua -i prog这样会先运行文件 prog 中的程序块后再进入交互模式读取用户输入并指定格式
io.read("*number") 读取数字格式dofile 函数
立即执行一个函数文件运行后如果无报错相当于加载了这个lua 文件中的函数库就可以在后续的交互模式中直接调用这个函数库里定义的方法方便测试新的代码,在代码编辑器中修改后在交互模式中执行dofile即加载修改后新的代码使用 dofile 后里面字符串文件路径的 \\ 记得再用一次 \\ 进行转义如:dofile("d:\\demo\\a.lua")<code>-- lib1.lua-- 计算两个数的平方和在开平方根function norm(x, y) return (x ^ 2 + y ^ 2) ^ 0.5end-- 计算某数的两倍function twice(n) return n * 2end/<code>
<code>> dofile("lib1.lua") -- 加载你编写的程序库,需要填完整的文件路径> n = norm(3.14, 1.0)> print(twice(4)) -- 8/<code>
词法规范
标识符
可以由任意字母、下划线、数字构成的字符串但不可以由数字开头避免使用以一个下划线开头之后跟着一个或多个大写字母的标识符
lua 会将这些标识符保留,用作特殊用途如 _VERSION, _PROMPT因为这是 lua 中的哑变量区域设置(Locale)
保留字
lua中区分大小写,如 "And" "AND" 是可以作为变量的,且与保留字 and 完全不同
注释的写法
单行注释:--code block多行注释:--[[ code block ]]一旦写了注释后面的代码将不会起作用,解释器会将其忽略小技巧:建议这样写多行注释 --[[ code block --]]可以在块注释前加一个连字符 - 即可启用代码块中的代码<code>--[[ print(222) print(666) --都不起作用(因为块注释注释掉了其中的代码)--]]-- 常规写法加一个连字符写块注释---[[ print(222) print(666) --会报错]]-- 推荐写法加一个连字符写块注释-- 因为这样写的话,第一行和最后一行就变成了两个彼此独立的单行注释---[[ print(222) print(666)--]]/<code>
全局变量
全局变量不需要声明只需要将一个值赋给这个全局变量即可创建在 lua 中访问一个未初始化的变量并不会发生错误但访问的结果是一个特殊的值 nil ,也就是空值删除全局变量,将它赋值为 nil<code>print(b) -- nilb = 10print(b) -- 10-- 删除全局变量b = nil print(b) -- nil/<code>
解释器程序
[] 代表可选项lua [选项参数] [脚本[参数]]不使用参数会直接进入交互模式-e 直接在命令行中输入代码如果只有 -e ,没有 -i 那么就不会进入交互模式,而是运行后直接结束-l 用于加载库文件_PROMPT
<code>lua -i -e "_PROMPT = 'lua>'"Lua 5.1.5 Copyright (C) 1994-2012 Lua.org, PUC-Riolua>/<code>
在交互模式中打印任何表达式的值
在解释器执行其参数前
运行脚本前的参数
在脚本代码中,可以通过全局变量 arg 来检索脚本的启动参数解释器在运行脚本前,会用所有的命令行参数创建一个名为 arg 的 table脚本名称位于索引 0 上它的第一个参数(示例中的 a) 位于索引1 ,以此类推而在 脚本文件(示例中的><code>lua 脚本 a b clua -e "sin = math.sin">
<code>lua 脚本 a b clua -e "sin = math.sin">
心得体会
没有熟练掌握的保留字