今天开始学习Lua,下面把一些重点记下来:

单行注释-- ,多行注释 --[[  .......  --]]

Lua中false和nil表示条件判断的假,其余的,包括空字符串,0,都表示真。

Lua没有整数,都是浮点数

字符串

Lua字符串不能直接修改,字符串可以用单引号或者双引号引住,反斜杠转义

字符串转数字 print(“10” + 1 ) 输出11,而不是输出101(不是数字转字符串)

字符串连接用.. 符号。 print(10 . 20) 输出1020,数字先转成字符串,再连接

尽量不要依赖这些隐式转换,因为有时候会很奇怪,例如  10 == “10” 会返回false。用tonumber, tostring函数

#“字符串” 表示字符串的长度

表与c++的map类似,是一种广义数组

a = {} 创建一个表

a["abc"] = 10 添加元素

注意变量a仅仅是存放了对这个table对象的引用,所以b = a 是引用赋值,而不是把整个表复制

a["abc"] = 10 等价于 a.abc = 10 但不等于 a[abc]

a[10]  与 a["10"] 是不一样的! 谨慎起见可以用a[tonumber("10")]

访问不存在的索引(访问 a[12345] 但之前未对 a[12345] 赋值)统一返回nil,不会报错。由此得出删除一条记录的方法就是给它赋值nil。

days = {"Monday", "Tuesday"} 会把days[1] 初始化为“Monday”, days[2] 初始化为"Tuesday"。从中可以看出Lua数组索引一般从1开始。

表可以嵌套。例如: polyline = {color = "blue", {x=0,y=0},{x=-10,y=0}}。 于是polyline[1] 就是{x=0,y=0}这个表。

a = {[1] = "1", [2] = "3"}这样初始化之后,a[1] 的值为"1", 由此可见数字索引初始化的方法。

a = {x = "abc"} 等价于 a = {["x"] = "abc"}

days = {"Monday", "Tuesday"} 会把days[1] 初始化为“Monday”, days[2] 初始化为"Tuesday"。从中可以看出Lua数组索引一般从1开始。

表可以嵌套。例如: polyline = {color = "blue", {x=0,y=0},{x=-10,y=0}}。 于是polyline[1] 就是{x=0,y=0}这个表。

大括号内部的逗号可以用分号代替。

运算

5%3 = 2   5.5 % 1 = 0.5

^是乘方,不是异或

~=才是不等于

比较操作可以用于任意类型,字符串比较(包括大于小于)是按照字母顺序的,例如 "2" < "15" 返回false

and or为运算法,and如果第一个操作数为假,返回之,否则返回第二个,or如果第一个为真,返回之,否则返回第二个。注意不是返回布尔型。

赋值

多重赋值 a,b = "va",10,a、b分别得到对应的值。Lua先对右边求值,再赋值。于是a,b = b,a可以用来交换a、b

控制结构

if.....elseif .....else ....end  注意不是else if

while ... do .....end 注意有do

repeat ... until ...

for i = 1,10,2 do ....end  从1开始,每步自增2,直到大于10(注意不是大于等于)。不要在循环过程中改i。

for i,v in ipairs(a) do print (i,v) end 只打印从1开始连续整数索引的元素,i是下标,v是value。同样不要在循环过程中修改变量的值。若是改为pairs,则可以遍历所有元素。

函数

“成员函数”的调用方式: o.foo(o,x) 可写成 o:foo(x)

function add(a) ..... return ... end 函数定义语法

多个返回值,直接return a,b

变长参数 function show(...)  for i,v in ipairs{...} do .... end return end 注意在函数内部也是通过...访问变长参数。例如 a,b = ...。可以把...当做一个表达式看待。

具有变长参数的函数可以拥有任意数量的固定参数,但是要放在变长参数之前。

特别重要的一点是,所有局部变量都要声明为local,否则自动变成全局。

Lua笔记(1)的更多相关文章

  1. Lua笔记

    闭包 示例一 function newCounter() return function() -- anonymous function i = i + return i end end c1 = n ...

  2. Lua笔记(2)

    函数高级特性 像新版c++一样,lua支持lambda表达式.也就是可以在函数内部声明函数.内层的函数可以访问外一层函数的局部变量. 一个函数以及它会访问到的外层函数的变量,称为闭包.这些变量又被称为 ...

  3. LUA笔记之表

    表据说是LUA的核, 呵呵, 看例子吧, 看上去, 跟java的list很像, 又有点像json: a = {} -- create a table and store its reference i ...

  4. LUA笔记之字符串

    LUA提供了自动数值转换, 基本上说是乱来也不为过, 就当做是不熟悉数据结构吧, 例子: print("10" + 1) --> 11 print("10 + 1& ...

  5. Lua 笔记

    lua命令: #enter shell lua #excute script file lua xxx.lua lua脚本: #!/usr/local/bin/lua 核心概念: As a exten ...

  6. lua笔记二 赋值语句

    赋值是改变一个变量的值和改变表域的最基本的方法. a = "hello" .. "world" t.n = t.n + 1 Lua可以对多个变量同时赋值,变量列 ...

  7. lua笔记之userdata

    1.一直使用框架里封装好的c库,想着自己一点一点的写些例子,学习下,以后需要c库,可以自己写了. 下边是一个简单的userdata的例子--数组操作. newarray.c #include &quo ...

  8. 设计模式实例(Lua)笔记之四(Builder 模式)

    1.描写叙述:      又是一个周三,快要下班了,老大突然又拉住我,喜滋滋的告诉我"牛叉公司非常惬意我们做的模型,又签订了一个合同,把奔驰.宝马的车辆模型都交给我我们公司制作了,只是这次又 ...

  9. 设计模式实例(Lua)笔记之五(Bridge模式)

    1.描写叙述 今天我要说说我自己,梦想中的我自己,我身价过亿,有两个大公司,一个是房地产公司,一个是服装制造业,这两个公司都非常赚钱,天天帮我在累加財富,事实上是什么公司我倒是不关心,我关心的是是不是 ...

随机推荐

  1. SQL Server join介绍

    介绍Inner Join(可以省略Inner,平常经常inner,就是inner join), Full Out Join,Cross Join,Left Join, Right Join区别. )) ...

  2. Atitit. Xss 漏洞的原理and应用xss木马

    Atitit. Xss 漏洞的原理and应用xss木马 1. XSS漏洞1 2. XSS的用途2 2.1. 盗取cookie2 2.2. 刷新流量 刷分3 2.3. DOS 窃取隐私”.“假冒身份”. ...

  3. CRM 2013 系统设置新功能一:界面自动保存 及 SDK 中 Xrm.Page.data.entity.save

    CRM 2013 界面会自动保存了..在系统设置中默认“是”,如果不需要可以调整. CRM实体记录在新建时会有出现“保存”按钮,非新建状态下,没有“保存”按钮只有“新建”按钮,系统将会自动为你保存最后 ...

  4. android assets文件夹资源的访问

    1.assets文件夹里面的文件都是保持原始的文件格式 . 2.assets中的文件只可以读取而不能进行写的操作. 3.assets目录下的资源文件不会在R.java自动生成ID,所以读取assets ...

  5. Android学习一(入门)

    一.Android 系统简介 1.1.1G-4G 1G:模拟制式手机,1995年问世的第一代模拟制式手机,只能进行语音通话, 2G:手机使用GSM,CDMA(9K/s),增加了接收数据的功能 2.5G ...

  6. 关于破解IDEA

    博客的意义就在于分享 哈哈 今天想装个 IDEA玩玩 去官网 下了个 安装包 想破解 结果度娘 帮解决了 直接po方法 很简单 就是安装好注册的时候 选择 License server ,填 http ...

  7. Android平台二维码之生成,扫描 & 识别

    1.二维码的前世今生 “二维条码/二维码(2-dimensional bar code)是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的:在代码编制上巧妙地利 ...

  8. Node.js(2)-protobuf zeromq gzip

    1.Node.Js环境准备 在win8 + vs.net 2012 环境下调试了很长时间没搞定安装编译问题,重装系统测试了2套环境,解决了编译问题: 1)Win8.1 + vs.net 2013 2) ...

  9. 爆零后的感受外加一道强联通分量HDU 4635的题解

    今天又爆零了,又是又,怎么又是又,爆零爆多了,又也就经常挂嘴边了,看到这句话,你一定很想说一句””,弱菜被骂傻,也很正常啦. 如果你不开心,可以考虑往下看. 翻到E(HDU 4635 Strongly ...

  10. Linux 本地文件或文件夹上传服务器

    Linux 本地文件或文件夹上传服务器 一.权限设置 本地文件或文件夹上传服务器,你首先需要获取到root权限: 二.上传方式 上传方式有两种 : 1.通过 FTP 客户端上传文件或文件夹: 2.通过 ...