该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

基础:

掌握红色部分,了解蓝色部分

进价:

掌握:红色部分,掌握蓝色部分

掌握: 品红字部分;了解青色部分

1.2 全局变量

全局变量不需要声明,给一个变量赋值后即创建了这个全局变量,访问一个没有初始化的全局变量也不会出错,只不过得到的结果是:nil.

print(b) --> nil

b = 10

print(b) --> 10

如果你想删除一个全局变量,只需要将变量负值为nil

b = nil

print(b) --> nil

这样变量b就好像从没被使用过一样.换句话说, 当且仅当一个变量不等于nil时,这个变量存在。

1.3 词法约定

标示符:字母(letter)或者下划线开头的字母、下划线、数字序列.最好不要使用下划线加大写字母的标示符,因为Lua的保留字也是这样的。Lua中,letter的含义是依赖于本地环境的。

保留字:以下字符为Lua的保留字,不能当作标识符。

and break do else elseif

end false for function if

in local nil not or

repeat return then true until

while

注意:Lua是大小写敏感的.

注释:单行注释:--

多行注释:--[[ --]]

--[[

print(10) -- no action (comment)

--]]

第2章 类型和值

Lua是动态类型语言,变量不要类型定义。Lua中有8个基本类型分别为:nil、boolean、number、string、userdata、function、thread和table。函数type可以测试给定变量或者值的类型。

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

print(type(10.4*3)) --> number

print(type(print)) --> function

print(type(type)) --> function

print(type(true)) --> boolean

print(type(nil)) --> nil

print(type(type(X))) --> string

变量没有预定义的类型,每一个变量都可能包含任一种类型的值。

print(type(a)) --> nil ('a' is not initialized)

a = 10

print(type(a)) --> number

a = "a string!!"

print(type(a)) --> string

a = print -- yes, this is valid!

a(type(a)) --> function

注意上面最后两行,我们可以使用function像使用其他值一样使用(更多的介绍参考第六章)。一般情况下同一变量代表不同类型的值会造成混乱,最好不要用,但是特殊情况下可以带来便利,比如nil。

2.1 Nil

Lua中特殊的类型,他只有一个值:nil;一个全局变量没有被赋值以前默认值为nil;给全局变量负nil可以删除该变量。

2.2 Booleans

两个取值false和true。但要注意Lua中所有的值都可以作为条件。在控制结构的条件中除了false和nil为假,其他值都为真。所以Lua认为0和空串都是真。

2.4 Strings

指字符的序列。lua是8位字节,所以字符串可以包含任何数值字符,包括嵌入的0。这意味着你可以存储任意的二进制数据在一个字符串里。Lua中字符串是不可以修改的,你可以创建一个新的变量存放你要的字符串,如下:

a = "one string"

b = string.gsub(a, "one", "another") -- change string parts

print(a) --> one string

print(b) --> another string

string和其他对象一样,Lua自动进行内存分配和释放,一个string可以只包含一个字母也可以包含一本书,Lua可以高效的处理长字符串,1M的string在Lua中是很常见的。可以使用单引号或者双引号表示字符串

a = "a line"

b = 'another line'

为了风格统一,最好使用一种,除非两种引号嵌套情况。对于字符串中含有引号的情况还可以使用转义符\来表示。Lua中的转义序列有:

\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 -- 右中括号

例子:

> print("one line\nnext line\n\"in quotes\", 'in quotes'")

one line

next line

"in quotes", 'in quotes'

> print('a backslash inside quotes: \'\\\'')

a backslash inside quotes: '\'

> print("a simpler way: '\\'")

a simpler way: '\'

还可以在字符串中使用\ddd(ddd为三位十进制数字)方式表示字母。

"alo\n123\""和'\97lo\10\04923"'是相同的。

还可以使用[[...]]表示字符串。这种形式的字符串可以包含多行也,可以嵌套且不会解释转义序列,如果第一个字符是换行符会被自动忽略掉。这种形式的字符串用来包含一段代码是非常方便的。

page = [[

An HTML Page

Lua

[[a text between double brackets]]

]]

io.write(page)

运行时,Lua会自动在string和numbers之间自动进行类型转换,当一个字符串使用算术操作符时,string就会被转成数字。

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

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

print("-5.3e - 10" * "2") --> -1.06e-09

print("hello" + 1) -- ERROR (cannot convert "hello")

反过来,当Lua期望一个string而碰到数字时,会将数字转成string。

print(10 .. 20) --> 1020

..在Lua中是字符串连接符,当在一个数字后面写..时,必须加上空格以防止被解释错。

尽管字符串和数字可以自动转换,但两者是不同的,像10 == "10"这样的比较永远都是错的。如果需要显式将string转成数字可以使用函数tonumber(),如果string不是正确的数字该函数将返回nil。

line = io.read() -- read a line

n = tonumber(line) -- try to convert it to a number

if n == nil then

error(line .. " is not a valid number")

else

print(n*2)

end

反之,可以调用tostring()将数字转成字符串,这种转换一直有效:

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

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

3.2 关系运算符

< > <= >= == ~=

这些操作符返回结果为false或者true;==和~=比较两个值,如果两个值类型不同,Lua认为两者不同;nil只和自己相等。Lua通过引用比较tables、userdata、functions。也就是说当且仅当两者表示同一个对象时相等。

a = {}; a.x = 1; a.y = 0

b = {}; b.x = 1; b.y = 0

c = a

a==c but a~=b

Lua比较数字按传统的数字大小进行,比较字符串按字母的顺序进行,但是字母顺序依赖于本地环境。

当比较不同类型的值的时候要特别注意:

"0" == 0 -- false

2 < 15 -- true

"2" < "15" -- false (alphabetical order!)

为了避免不一致的结果,混合比较数字和字符串,Lua会报错,比如:2 < "15"

3.3 逻辑运算符

and or not

逻辑运算符认为false和nil是假(false),其他为真,0也是true.

and和or的运算结果不是true和false,而是和它的两个操作数相关。

a and b -- 如果a为false,则返回a,否则返回b

a or b -- 如果a为true,则返回a,否则返回b

例如:

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

一个很实用的技巧:如果x为false或者nil则给x赋初始值v

x = x or v

等价于

if not x then

x = v

end

and的优先级比or高。

C语言中的三元运算符

a ? b : c

在Lua中可以这样实现:

(a and b) or c

not的结果只返回false或者true

print(not nil) --> true

print(not false) --> true

print(not 0) --> false

print(not not nil) --> false

3.4 连接运算符

.. --两个点

字符串连接,如果操作数为数字,Lua将数字转成字符串。

print("Hello " .. "World") --> Hello World

print(0 .. 1) --> 01

3.5 优先级

从高到低的顺序:

^

not - (unary)

* /

+ -

..

< > <= >= ~= ==

and

or

除了^和..外所有的二元运算符都是左连接的。

a+i < b/2+1 (a+i) < ((b/2)+1)

5+x^2*8 5+((x^2)*8)

a < y and y <= z (a < y) and (y <= z)

-x^2 -(x^2)

x^y^z x^(y^z)

lua php 触摸精灵,lua程序设计主要学习路径相关推荐

  1. python实现触摸精灵功能_触摸精灵lua脚本实现微信群自动加好友功能~值得一看...

    原创 公众号|花花爱软件 --此脚本针对iPhone5/5s --目前只实现一个屏幕微信群好友的添加,如果想添加更多好友, --需要划屏操作,执行划屏操作时建议循环滑动 function main() ...

  2. ios平台触动精灵lua调用C语言

    随着移动设备的兴起,Lua 作为嵌入式脚本语言,由于其自身的特点及优势,在应用领域使用度越来越高.触动精灵是一个手机游戏辅助平台,可以在上面开发自动化游戏的脚本,编程语言为lua.调用C语言对lua进 ...

  3. lua transliterate实现(lua程序设计10.6练习10.3题)

    lua transliterate实现(lua程序设计10.6练习10.3题) local function transliterate(s,t)return (string.gsub(s," ...

  4. lua split实现(lua程序设计10.6练习10.1题)

    lua split实现(lua程序设计10.6练习10.1题) local function split(s,sp)local t = {}local last = 1local irepeati = ...

  5. lua实现继承(lua程序设计21.7 练习21.2题)

    lua实现继承(lua程序设计21.7 练习21.2题) StackQueue = Stack:new() function StackQueue:insertBottom(v)table.inser ...

  6. lua实现stack(lua程序设计21.7 练习21.1题)

    lua实现stack(lua程序设计21.7 练习21.1题) Stack = {} function Stack:new(o)o = o or {}self.__index = selfsetmet ...

  7. lua学习01:c调用lua、lua调用c、lua的协程、lua的常见API、lua读取配置文件总结

    文章目录 1.c通过虚拟机和虚拟栈调用lua test-vm.c test-vm.lua 打印效果 2.lua通过虚拟机和虚拟栈调用c lua-tbl.c test-tbl.lua 3.lua的协程 ...

  8. lua脚本之lua语言简介以及lua的安装

    本博主不擅于进行文字创作,所以,相当一部分文字皆复制于其他博文.还希望能够得到谅解.  一.Lua语言简介 Lua是一个免费的开源软件,可以免费用于科研及商业.Lua具有一个专家团队在维护和升级,其设 ...

  9. lua怎么嵌入php,Lua教程(一):在C++中嵌入Lua脚本

    本系列教程主要介绍如何在C/C++程序里面嵌入Lua脚本,我打算从以下几个方面来介绍: 1.如何在C/C++里面嵌入Lua脚本 2.Lua访问C/C++数据结构(这里面要介绍类,结构体,函数,变量,枚 ...

最新文章

  1. 私有5g网络_欧洲通过FUDGE5G的启动来支持工业4.0的云原生私有5G
  2. python读取excel画散点图-python学习之matplotlib绘制散点图实例
  3. 检索数据_18_按照多个字段排序查询结果
  4. 数据结构与算法之递归系列
  5. 2011.10.16
  6. java中的泛型(一)
  7. 百度图神经网络学习——day05:图神经网络进阶模型
  8. Flink1.6系列之—数据流编程模型
  9. DEDECMS之二 如何修改模板页
  10. 2019年“深圳杯”数学建模挑战赛B题解题思路(一)
  11. 如何将socket服务器部署到云服务器上
  12. python 什么意思_Python中冒号等于(:=)是什么意思?
  13. wampserver下载以及安装教程
  14. matlab rawdat,工控网络安全态势感知算法实现.pdf
  15. HDU:2026 首字母变大写
  16. java ftp文件大小_java如何获得ftp服务器上指定文件的大小
  17. 【优化求解】基于灰狼算法GWO求解最优目标matlab代码
  18. 手机客户端使用ConnectBot软件远程登录服务器
  19. Mac idea java 代码的前进后退 代码的撤销和前进快捷键
  20. experience(1):一个博士的经历(小木虫精华帖)

热门文章

  1. C# 中对象与JSON字符串相互转换的三种方法
  2. c#中将WM_CLOSE消息发送到没有窗口的进程的方法
  3. mysql 8.0.19 winx64安装及修改初始密码
  4. spring 点击保存按钮页面禁用_用一篇深度好文,详解按钮的设计
  5. 开关电源仿真与设计基于spice 第2版 中译本_新书推荐 开关电源控制环路设计Christophe Basso 著...
  6. Android开发面试题Service之startService和bindService之间的区别
  7. Android开发之依赖库混淆与外层APP混淆开启的关系
  8. C语言编程猜谜语,简单的谜语大全及答案
  9. linux 设置gbk编码格式,设置ubuntu支持gbk编码格式和设置eclipse 编码格式
  10. matlab第三方控件,第三方控件介绍