快捷注释:

- -[[

print(10) - ->10  - - 不起作用(因为这是注释)

- -]]

当重新启用这段代码时,只需在一次行行首添加一个连接字符即可:

- - -[[

print(10) - ->10  - - 10

- -]]

全局变量:

全局变量不需要声明,只需将一个值赋予一个全局变量就可以创建了, 在Lua中,访问一个未初始化的变量不会引发错误,访问结果是一个特殊的值 nil ,

print(b)  - -> nil

b=10

print(b) - ->10

通常没有必要删除一个全局变量,如果一个变量只有较短的生存周期,那么久应该使用局部变量。但是,诶果一定要删除某个全局变量的话,只需要将其赋值为nil

b=nil

print(b)=nil

字符串:

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

a = "one string"

b = string.gsub(a, "one", "another")   -- 修改字符串的一部分

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: '\'

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

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

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

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

print("hello" + 1)          -- 错误(不能转换为”hello”)

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

print(10 .. 20)      --> 1020

在Lua中,“..”是字符串的连接操作符,当直接在一个数字后面输入它的时候,必须要用一个空格来分隔它们,不然,lua会就将第一个点理解为一个小数点。

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

line = io.read()         -- 读取一行

n = tonumber(line)       -- 尝试将它转换为一个数字

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   这样的转换是合法的

在Lua 5.1中,可以在字符串前放置操作符 ”#“ ,这样可以获得该字符串的长度

A = “hello”

print(#A)    - -> 5

print(#”good\0bye”)  - -> 8

Lua的逻辑操作符

逻辑操作符有 and、or 和 not 。与条件控制语句一样,所有的逻辑操作符将 false 和 nil 视为假,而将其他的任何东西视为真。对于操作符 and 来说,如果它的第一个操作数为假,就返回第一个操作数;不然就返回第二个操作数。对于操作符 or 来说,如果它的第一个操作数为真,就返回第一个操作数,不然就返回第二个操作数

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

连接运算符

..         --两个点

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

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

print(0 .. 1)                   --> 01

table 构造试

构造器是创建和初始化表的表达式。表是Lua特有的功能强大的东西。最简单的构造函数是{},用来创建一个空表。可以直接初始化数组:

例如:days = {"Sunday", "Monday", "Tuesday", "Wednesday",

"Thursday", "Friday", "Saturday"}

Lua将"Sunday"初始化days[1](第一个元素索引为1),用"Monday"初始化days[2]...

print(days[4])       --> Wednesday

Lua还提供了一种特殊的语法用于初始化记录风格的table

a = {X=10,y=20}   等价于  a={ }; a.x = 10; a.y = 20

不管用何种方式创建table,我们都可以向表中添加或者删除任何类型的域,构造函数仅仅影响表的初始化。

w = {x=0, y=0, label="console"}

x = {sin(0), sin(1), sin(2)}

w[1] = "another field"    - - 添加key 1 到 table w

x.f = w - - 添加key “f” 到 table x

print(w["x"])     --> 0

print(w[1])       --> another field

print(x.f[1])     --> another field

w.x = nil         -- 删除字段 "x"

每当Lua调用构造函数,Lua都会创建一个新的table,然后初始化它,这样,就能用table写出以下的链接代表码,可以使用table构造一个list:

list = nil

for line in io.lines() do

list = {next=list, value=line}

end

这段代码从标准输入读进每行的内容,然后将每行按相反的次序存储到一个链表中。链表的每一个节点都是一个table,table 中含有两个字段:value(没行的内容)和 nex(指向下一个节点的引用)。下面的代码打印链表的内容:

l = list

while l do

print(l.value)

l = l.next

end

在同一个构造函数中可以混合列表风格和record风格进行初始化,如:

polyline = {

color="blue", thickness=2, npoints=4,

{x=0,   y=0},

{x=-10, y=0},

{x=-10, y=1},

{x=0,   y=1}

}

这个例子也表明我们可以嵌套构造函数来表示复杂的数据结构.

print(polyline[2].x)     --> -10

print(polyline[4].y)     --> -1

这两种风格的构造式各有其限制,例如 不能使用负数的索引,也不能用运算符作为记录的字段名,为了满足这些要求,Lua还提供了一种更通用的表达格式。这种格式允许在方括号之间,显式地用一个表达式来初始化索引值:

opnames = {["+"] = "add", ["-"] = "sub",

["*"] = "mul", ["/"] = "div"}

i = 20; s = "-"

a = {[i+0] = s, [i+1] = s..s, [i+2] = s..s..s}

print(opnames[s])    --> sub

print(a[22])         --> ---

如果真的想要数组下标从0开始:

days = {[0]="Sunday", "Monday", "Tuesday", "Wednesday",

"Thursday", "Friday", "Saturday"}

注意:不推荐数组下标从0开始,否则很多标准库不能使用。

在构造函数的最后的","是可选的,可以方便以后的扩展。

a = {[1]="red", [2]="green", [3]="blue",}

在构造函数中域分隔符逗号(",")可以用分号(";")替代,通常我们使用分号用来分割不同类型的表元素。

{x=10, y=45; "one", "two", "three"}

赋值语句

赋值是改变一个变量的值和改变表域的最基本的方法。

  a = "hello" .. "world"

  t.n = t.n + 1

Lua可以对多个变量同时赋值,变量列表和值列表的各个元素用逗号分开,赋值语句右边的值会依次赋给左边的变量。

  a, b = 10, 2*x       <-->       a=10; b=2*x

遇到赋值语句Lua会先计算右边所有的值然后再执行赋值操作,所以我们可以这样进行交换变量的值:

  x, y = y, x                     -- 交换 'x' for 'y'

  a[i], a[j] = a[j], a[i]         -- 交换3 'a[i]' for 'a[i]'

当变量个数和值的个数不一致时,Lua会一直以变量个数为基础采取以下策略:

  a. 变量个数 > 值的个数             按变量个数补足nil

  b. 变量个数 < 值的个数             多余的值会被忽略

例如:

  a, b, c = 0, 1

  print(a,b,c)             --> 0   1   nil

  a, b = a+1, b+1, b+2     -- value of b+2 is ignored

  print(a,b)               --> 1   2

  a, b, c = 0

  print(a,b,c)             --> 0   nil   nil

上面最后一个例子是一个常见的错误情况,注意:如果要对多个变量赋值必须依次对每个变量赋值。

  a, b, c = 0, 0, 0

  print(a,b,c)             --> 0   0   0

多值赋值经常用来交换变量,或将函数调用返回给变量:

  a, b = f()

f()返回两个值,第一个赋给a,第二个赋给b。

cocos2dx - Lua 语言的更多相关文章

  1. Cocos2d-x 脚本语言Lua中的面向对象

    Cocos2d-x 脚本语言Lua中的面向对象 面向对象不是针对某一门语言,而是一种思想.在面向过程的语言也能够使用面向对象的思想来进行编程. 在Lua中,并没有面向对象的概念存在,没有类的定义和子类 ...

  2. Cocos2d-x 脚本语言Lua使用

    Cocos2d-x 脚本语言Lua使用 前面几篇博客已经把Lua的相关基础知识介绍了.本篇博客就来介绍一下,怎样在Cocos2d-x项目中使用Lua这门脚本语言进行开发.因为笔者使用的时Mac系统.所 ...

  3. Cocos2d-x 脚本语言Lua基本数据结构-表(table)

    Cocos2d-x 脚本语言Lua基本数据结构-表(table) table是Lua中唯一的数据结构.其它语言所提供的数据结构,如:arrays.records.lists.queues.sets等. ...

  4. Cocos2d-x 脚本语言Lua基本语法

    Cocos2d-x 脚本语言Lua基本语法 前面一篇博客对Lua这门小巧的语言进行了简单的介绍.本篇博客来给大家略微讲一下Lua的语法.不会长篇累牍得把Lua的全部语法都讲一遍,这里通过下面几点来讲L ...

  5. Cocos2d-x 脚本语言Lua介绍

    Cocos2d-x 脚本语言Lua介绍 本篇博客记录Lua学习.学习来自eoe论坛,Lua语言开发Cocos2d-x游戏入门视频教程,猛戳下面地址: http://www.eoeandroid.com ...

  6. cocos2d-x + Lua接入iOS原生SDK的实现方案[转]

    相信很多朋友在使用cocos2d-x+lua开发游戏时都遇到过接入iOS原生SDK的问题,比如常见的接应用内支付SDK,广告SDK或是一些社交平台SDK等等,我也没少接过这类SDK.这篇文章主要是对我 ...

  7. [原创]cocos2d-x + Lua接入iOS原生SDK的实现方案

    相信很多朋友在使用cocos2d-x+lua开发游戏时都遇到过接入iOS原生SDK的问题,比如常见的接应用内支付SDK,广告SDK或是一些社交平台SDK等等,我也没少接过这类SDK.这篇文章主要是对我 ...

  8. cocos2d-x lua脚本开发 1

    自从开始关注OpenResty之后,逐渐关注Lua语言,发现这个语言真真是容易让人喜爱的语言.偶然间发现了cocos2d-x,还支持lua,所以果断尝试一下. 这里是在cocos2d-x官方网站下载了 ...

  9. Cocos2d-x Lua 阅读Csv文件,使用数据更方便

    在我的书或出售之前,我的源代码,有Csvshadow文件. 也许这是偏见.我与工作将是最长的轮廓Csv,所以,我会帮助不大喜欢它的游戏. Csv文件,非常格式easy,也就是说,一个数据线,字段之间用 ...

随机推荐

  1. 运行里用\\加IP地址访问远程主机和用mstsc登录远程主机有什么区别??

    \\ip是访问共享:mstsc是直接远端控制主机 "\\加IP",只要是windows,除win9x外,默认系统自带共享服务,除非有防火墙,或者手工关闭lanmanserver & ...

  2. [No0000166]CPU的组成结构及其原理

    中央处理器(Central Processing Unit, CPU) CPU的基本架构和工作原理其实百科上讲得已经相当清楚了,不过我觉得有些事情呢还是给个例子出来比较方便学习.本文会先从内存地址,计 ...

  3. [No0000EC]C# 字符串(String)

    在 C# 中,可以使用字符数组来表示字符串,但是,更常见的做法是使用 string 关键字来声明一个字符串变量.string 关键字是 System.String 类的别名. 创建 String 对象 ...

  4. Exception 04 : java.lang.ClassNotFoundException: Could not load requested class : org.hsqldb.jdbcDriver

    异常详细信息 org.hibernate.boot.registry.classloading.spi.ClassLoadingException: Unable to load class [org ...

  5. Django + Redis实现页面缓存

    目的:把从数据库读出的数据存入的redis 中既提高了效率,又减少了对数据库的读写,提高用户体验. 例如: 1,同一页面局部缓存,局部动态 from django.views import View ...

  6. maven工程中防止mapper.xml文件被漏掉、未加载的方法

    maven工程中防止mapper.xml文件被漏掉.未加载的方法 就是在pom.xml文件中添加以下内容 <!-- 如果不添加此节点mybatis的mapper.xml文件都会被漏掉. --&g ...

  7. python实现图片隐藏信息技术

    隐秘通信的3种典型方式: ①将秘密信息隐于网络通信协议中. ②将秘密信息隐于数字签名等密码协议中 . ③将秘密信息隐于数字图像中. 第三种是利用图像或音频数据对人类感官系统的冗余. 隐藏域数字图像中的 ...

  8. [MySQL优化2]不用SELECT * FROM table;

    假设有一张employees表,它有8列:员工人数,姓氏,名字,分机,电子邮件,办公室代码,报告,职位等.如果要仅查看员工的名字,姓氏和职位,请使用以下查询:SELECT lastname, firs ...

  9. shell日志分析进阶篇

    前面我们说了shell分析日志常用指令,现在我们随ytkah一起看看shell日志分析进阶篇,假设日志文件为ytkah.log //统计不重复抓取数量 cat ytkah.log | awk '{pr ...

  10. 微信小程序tabbar设置样式在哪里改

    微信小程序tabbar通俗点说就是底部导航,我们一般会配置相关的菜单,方便读者快速导航.tabbar是在项目根目录中的配置文件 app.json 中进行设置:如果小程序是一个多 tab 应用(客户端窗 ...