Lua语法和使用基础
来源:互联网 发布:钢筋算量是怎么算法的 编辑:程序博客网 时间:2024/06/13 00:59
1.语法注释
单行注释中,连续两个减号"--"表示注释的开始,一直延续到行末为止。
多行注释中,由"--[["表示注释开始,并且一直延续到"]]"为止。
在Lua中,语句之间可以用分号";"隔开,也可以用空白隔开。一般来说,如果多个语句写在同一行的话,建议总是用分号隔开。
2.语句块
在Lua中,它是用do 和 end 括起来的。比如:
doprint("Hello")print("Hello123")end
3.赋值语句
在默认情况下,变量总是认为是全局的,局部变量需要用local定义。赋值语句在Lua被强化了。它可以同时给多个变量赋值。
a, b, c = 1, 2, 3a, b = b, alocal c =1 --局部变量
4.数值运算
和C语言一样,支持 +, -, *, /。但Lua还多了一个"^"。这表示指数乘方运算。连接两个字符串,可以用".."运处符。
比较运算符有:<(小于) 、>(大于)、<=(小于等于)、>=(大于等于)、==(等于)、~=(不等于)
取字符串长度运算符“#”:count = #(string)
对于Table,Function和Userdata类型的数据,只有 == 和 ~=可以用。相等表示两个变量引用的是同一个数据。比如:
a={1,2}b=a print(a==b, a~=b) --输出 true, falsea={1,2}b={1,2} print(a==b, a~=b) --输出 false, true
5.逻辑运算
and, or, not
x = a and b <==> a == false x = a else x = b
x = a or b <==> a == true x = a else x = b
总结:and就是一假则假,or是一真则真。这和其他语言解释是相通的,不同的是相反情况下,其他语言会再次判断第二个条件,而lua会不管第二个操作符真假而直接返回。
false = not true
我们可以模拟C语言中的语句:x = a? b : c,在Lua中,可以写成:x = a and b or c
但是这个语句是有缺陷的,在a and b or c中, 通常a是逻辑表达式, b和c不会是表达式, 首先运算a and b, 然后是(a and b) or c. 正常情况下, 若a为真, a and b会返回b, 如果b是一个字串或数值, 它就是'真', 因此b or c会直接返回b, 符合预期的"a为真, 返回b"的设计。
但如果b是一个变量, 而该变量恰好为空(如尚未定义)时, b为假, b or c就会返回c. 此时产生了"a为真, 但返回c"的情况。
因此为了使表达式a and b or c正常工作, 必须保证b为真. 在不能保证b为真的情况下, 只有用if-else语句才能保证逻辑严密性。
最有用的语句是: x = x or v,它相当于:if not x then x = v end
6.关键字
andbreakdoelseelseifendfalseforfunctionifinlocalnilnotorrepeatreturnthentrueuntilwhile7.变量类型
怎么确定一个变量是什么类型的呢?可以用type()函数来检查。Lua支持的类型有以下几种:
(这和C语言总是以"\0"结尾是不一样的)Table关系表类型,这个类型功能比较强大Function函数类型,函数也是一种类型,也就是说,所有的函数,它本身就是一个变量。Userdata这个类型专门用来和Lua的宿主打交道的。宿主通常是用C和C++来编写的,
在这种情况下,Us是宿主的任意数据类型,常用的有Struct和指针。Thread线程类型,在Lua中没有真正的线程。Lua中可以将一个函数分成几部份运行。
8.控制语句
if 条件 then ... elseif 条件 then ... else ... end
if 1+1=2 then print("true") elseif 1+2~=3 then print("true") else print("false") endwhile 条件 do ... end
while 1+1~=2 do print("true") endrepeat ... until 条件
repeat print("Hello") until 1+1~=2
for 变量=初值, 终点值, 步进 do ... end
for i = 1, 10, 2 doprint(i)endfor 变量1, 变量2, ... 变量n in 表或枚举函数 do ... end
for a,b in mylist doprint(a, b)endfor的循环变量总是只作用于for的局部变量;当省略步进值时,for循环会使用1作为步进值,使用break可以用来中止一个循环。
9.转义字符
和C语言相同的,它支持一些转义字符,列表如下:
\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
在Lua中,可以用另一种表示方法:用"[["和"]]"将多行的字符串括起来。例如
> x = [[This is a long string including ' and "]]
> print(x)
This is a long stirng including ' and "
方括号的配对规则是: 在[ [之间可以没有等号(上面的情形), 或者有任意数量的等号, 配对时将寻找包含相同数量等号的] ]. 例如:
> x = [==[This is a long string including ', ]] and "]==]
> print(x)
This is a long string including ', ]] and "
10.用gcc编译c与lua的交互程序
lua的安装目录:
lua.h lualib.h lauxlib.h所在目录为/usr/local/include/
liblua.a链接库所在目录为/usr/local/lib/
c程序源代码文件为testlua.c
gcc命令:gcc -o testlua testlua.c [-I /usr/local/include/ -L /usr/local/lib] -llua -ldl -lm
解析:
-I /usr/local/include/ -L /usr/local/lib为指定.h和静态库文件的路径,默认gcc会把此目录包含为索引目录,所以此项可以省略
-llua 连接名为lua的静态库-文件名为liblua.a
作用是提供3个头文件中函数的实现代码让链接器去连接
-ldl 连接名为dl的动态库-文件名为libdl.so
作用是提供了dlopen,dlclose,dlsym,dlerror四个方法,它们是实现应用程序运行时动态加载库;这里加载它的原因是liblua.a的实现中使用了这里面的方法调用了系统的标准动态库。
-lm 连接了名为m的动态库-文件名为libm.so
作用是提供数学库的支持,也是lua库中需要的
- Lua语法和使用基础
- Lua 基础语法|特性使用集合
- lua脚本基础语法
- Lua基础语法-1
- lua 基础语法
- Lua基础语法
- Lua基础之语法
- Lua脚本语法基础
- lua基础语法
- lua基础语法2
- Lua 语法基础
- lua基础语法
- lua基础语法2
- lua基础语法
- Lua基础语法
- 【Lua】 基础语法总结
- LUA 基础语法相关
- lua 基础语法
- 黑马程序员——指针
- vmware复制虚拟机
- JavaScript中两个感叹号的作用
- .net 线程处理 托管线程处理的最佳做法
- 自定义Dialog,仿QQ删除提醒dialog
- Lua语法和使用基础
- 最近看看git有哪些新见的比较好的项目
- iOS7下隐藏statusbar的详细研究
- 修改织梦友情链接文件避免暴露模板路径
- SQL 导入2007EXCEL 多字段时偷懒处理
- 图片缓存使用第三方控件
- android下载安装APK
- 分页缓存设置
- 非常不错的网页画时序图