<i data-toggle="wy-nav-top" class="fa fa-bars"></i> <a href="../../index.html">赵子清技术文章</a> </nav> <div class="wy-nav-content"> <div class="rst-content"> <li><a href="../../index.html">Docs</a> »</li> <li><a href="../index.html">开发语言</a> »</li> <li>lua基础</li> <li class="wy-breadcrumbs-aside"> </li> Lua本身以简单优雅为美, 着眼于处理那些C不擅长的任务. 借助C/C++为其扩展, Lua可以展现无穷的魅力. Lua本身完全遵循ANSI C写成, 只要有C编译器的地方, Lua便可以发挥它的力量. Lua不需要追求python那样大而全的库, 太多的累赘, 反而会破坏她的优美. — <Lua中文教程>译序 本文章基于lua 5.2. 预备知识¶ 获得lua¶ lua非常小, 且支持几乎所有的系统. Linux上基本已预装了lua, 其他系统如何获得lua请参考: http://lua-users.org/wiki/LuaBinaries lua命令行¶ 安装好lua后, 即可使用lua命令行, 它的使用非常简单: usage: lua [options] [script [args]] Available options are: -e stat execute string 'stat' -i enter interactive mode after executing 'script' -l name require library 'name' -v show version information -E ignore environment variables -- stop handling options - stop handling options and execute stdin 不加任何参数则进入交互式环境. arg全局变量保存了所有参数, 脚本名索引为0, 脚本参数的索引从1开始, 而脚本之前参数的索引为负数. 比如运行: $lua -e "print 'hello'" test.lua a b arg保存的值如下: arg[-3] = lua arg[-2] = -e arg[-1] = print 'hello' arg[0] = test.lua arg[1] = a arg[2] = b 保留关键字¶ lua的变量命令和C语言一致, 但最好不要使用下划线加大字字母的标识符, 因为这样的标识符一般供内部使用. lua的保留关键字如下: and break do else elseif end false for function if in local nil not or repeat return then true until while 注释¶ 单行注释: – 多行注释 –[[ –]] Chunk¶ Chunk就是一系列语句. lua执行的语句块, 比如一个文件交互模式下的每一行就是一个chunk. 数据类型¶ lua是动态类型语言, 声明变量时不需要指定数据类型. lua一其有8种基本类型: nil boolean number string userdata function thread table 使用type()函数可以查看给定变量或值的类型. string¶ 字符串字面值可以用单引号也可以用双引号, 最好保持风格统一 还可以用 [[string]] 这种形式表示字符串, 此时字符串可以包含多行,且不会进行转义 lua会在需要时把number和string进行互相转化, 也可以使用tostring()和tonumber()进行显式转换 .. 是字符串连接符, 相当于某些语言中的+ 警告 在lua里使用条件判断时, 除了false和nil为假, 其他条件都为真, 所以数字0和空字符串也为真. string里可以有0, 且是可读的, 要修改必须新建一个变量 userdata¶ userdata可以将C数据存放在lua变量中, 它除了赋值和相等比较外没有其他操作. userdata用来描述应用程序或者使用C实现的库创建的新类型. // todo thread¶ // todo 表达式¶ 算术运算符¶ 二元: + - * / ^(幂) 一元: -(取负) 关系运算符¶ lua关系运算符包括: < > <= >= == ~= 关系运算符的结果是true或false. 对于table, userdata和function, 是通过引用比较的,而不是值比较. 警告 不等于是~=而不是!= 逻辑运算符¶ lua逻辑运算符包括: and or not 警告 and和or的结果不是true/false, 而是和2个操作数有关, 见下例. print(4 and 5) --> 5 print(nil and 13) --> nil print(false and 13) --> false print(4 or 5) --> 4 print(false or 5) --> 5 连接运算符¶ 即两个点 .. , 使用时最好在两边加上空格. 运算符优先级¶ lua运算符优先级从高到低顺序如下: ^ not - (unary) * / + - .. < > <= >= ~= == and or 语句¶ 赋值¶ lua可以一次性给多个变量同时赋值, 变量列表和值列表的各元素用逗号隔开: a, b = 10, 2*x lua会先计算赋值语句右边所有的值, 然后再进行赋值操作, 所以在lua里可以通过下面这样来交换两个变量的值: x, y = y, x 局部变量¶ 可以通过local声明一个局部变量, 它只在被声明的代码块中有效. 访问局部变量比全局变量更快, 并且可以避免命名冲突. 可以把局部变量放在 do..end 中, 就好像C中的{}中一样. 条件语句¶ lua条件语句主要有3种结构: if cond then -- C: if(cond) { then-part -- } end; if cond then – C: if(cond) { then-part – } else – else { else-part – } end; if cond1 then – C: if(cond1) { then-part – } elseif cond2 then – else if(cond2) { elseif-part – } … – … else – else { else-part – } end; 注意if语句后面的then以及最后的end. 循环语句¶ while: while cond do -- C: while(cond) { statements; -- } end; repeat-until: repeat -- C: do{ statements; -- } while(cond) until cond; for: for var=start,end,step do -- C: for(var=start;var<=end;var+=step) { loop-part -- } end 警告 for后面的表达式只会在循环开始前被计算1次 上面的C等价语句其实不完全一致, 因为step也可以是负数 step可以省略, 默认为1 end值也被循环一次, 所以逻辑不等于C的for(i=start; i!=end; i+=step) 循环过程中不要改变控制变量的值, 否则结果是不可预知的 break语句可以用来退出循环,但必须是语句块的最后一句. 函数¶ </div> </div> <footer> <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation"> </div> © Copyright 2019, 赵子清 </p> </div> </div> 文章作者: 安全书文章链接: https://lua.ren/zl/2016-01-01-687_lua%E5%9F%BA%E7%A1%80/版权声明: 本博客所有文章除特别声明外,均采用 null 许可协议。转载请注明来自 安全书!lua文章上一篇使用lua下一篇Car Evaluation Analysis相关推荐 2024-04-03lua快速入门 2024-04-03Lua 学习 chapter7 2024-04-03C# 使用 Lua 取得 Redis 自訂複雜型別 2024-04-03Lua语言学习(二) 2024-04-03OpenResty Lua学习笔记 2024-04-03Lua语法速记安全书安全书文章1791标签213分类104Follow Me公告公众号:糖果的实验室 目录1. 预备知识1.1. 获得lua1.2. lua命令行1.3. 保留关键字1.4. 注释1.5. Chunk2. 数据类型2.1. string2.2. userdata2.3. thread3. 表达式3.1. 算术运算符3.2. 关系运算符3.3. 逻辑运算符3.4. 连接运算符3.5. 运算符优先级4. 语句4.1. 赋值4.2. 局部变量4.3. 条件语句4.4. 循环语句5. 函数最新文章无题2024-10-25无题2024-09-20Obsidian的ChatGPT插件TextGenerator2024-08-27在Mac系统上将默认的GCC切换到LLVM的Clang2024-04-03Lazygit的安装2024-04-03搜索