例1 第一个程序
--经典hello程序
1
|
print(
"hello"
)
|
--输出
hello
例2 注释
--单行注释使用“--”即可
--[[多行注释以“--[[”开始,以“]]”结束]]
--当然本例没有输出,因为它全部是注释
例3 变量
--变量有值的时候才有类型,否则变量本身是无类型的
1
2
3
4
5
6
7
8
9
|
a=1
b=
"abc"
c={}
d=print
print(type(a))
print(type(b))
print(type(c))
print(type(d))
|
--输出
number
string
table
function
例4 变量名
--变量名由字母、数字、下划线构成
--不以数字开头:
-
one_1=11--合法
-
1_one非法
例5 更多的变量名
--[[在Lua中以下划线”_”开始的参数命名通常代表特殊的值,如(“_VERSION”),所以尽量不用使用以下划线开始命名。当时通常单个“_”代表虚假的参数。注:这是Lua的一个语法,后面将讲到,如:local _, x = string.find(s, p) ]]
1
|
print(_VERSION)
|
--输出
Lua 5.1
例6 --严格区分大小写
-- 在Lua中所有的变量和关键字都是大小写敏感的
1
2
3
4
|
ab=1
Ab=2
AB=3
print(ab,Ab,AB)
|
--输出
1 2 3
例7 关键字
--[[ Lua的关键字大家可以去参考“Lua Reference Manual”,附:5.1版本的参考手册在线地址:http://www.lua.org/manual/5.1/index.html
变量命名的时候应避免使用关键字,应Lua是大小写区分的,所以“and”是关键字,但“AND”不是是合法的命名,尽管如此,建议大家尽量不要用关键字(各种大小写版本)]]
-- Lua 涉及的关键字有: and, break, do, else, elseif,end, false, for, function, if, in, local, nil, not, or,repeat, return, then, true, until, while。
例8 --String 字符串
--[[字符串可以用双引号(“”)也可以用单引号(‘’),类似于JavaScript语法,对于多行字符串,使用“[[ ]]”括起来 ]]
1
2
3
4
5
6
7
8
9
|
a=
"single 'quoted' string and double \"quoted\" string inside"
b=
'single \'quoted\' string and double "quoted" string inside'
c= [[ multiple line
with
'single'
and
"double"
quoted strings inside.]]
print(a)
print(b)
print(c)
|
--输出
single 'quoted' string and double "quoted" string inside
single 'quoted' string and double "quoted" string inside
multiple line
with 'single'
and "double" quoted strings inside.
例9 赋值
--可以一次对多个变量赋值,规则:如果等号(“=”)右边多了,则舍弃,左边多了,则赋值为空(nil)
1
2
3
|
a,b,c,d,e = 1, 2,
"three"
,
"four"
, 5
print(a,b,c,d,e)
|
-- 输出
1 2 three four 5
例10 其它赋值
-- 表达式 a,b=b,a表示a和b的值交换,注:类型不一样照样可以交换
例11 数字
-- string and a number). – 在Lua中两点“..”表示字符串连接,对应其他语言中的“+”连接
1
2
|
a,b,c,d,e = 1, 1.123, 1E9, -123, .0008
print(
"a="
..a,
"b="
..b,
"c="
..c,
"d="
..d,
"e="
..e)
|
--输出
a=1 b=1.123 c=1000000000 d=-123 e=0.0008
例12 多种输出方法
--多种输出方式或写法
-
print "Hello from Lua!" -- 不带括号
-
print("Hello from Lua!") -- 带括号,两者等价
--[[什么时候可以省略括号? 这是以种特殊的情况,只有当函数的参数只有一个,而且这个参数是字面上的字符串串(a literal string:即直接传字符串,而不是值为字符串的参数变量)或者蚕食是table结构。这两种情况才可以省略圆括号]]
例13 另一种输出方法
--io.write("hehe"),但是io.write()是不会换行的,可以使用print()来实现换行
例14 Tables
-- 表结构在Lua中特别常见,可以存储任何类型,很灵活。非常类似于JS中的一个对象。
1
2
3
4
|
a={} -- {} creates an empty table
b={1,2,3} -- creates a table containing numbers 1,2,3
c={
"a"
,
"b"
,
"c"
} -- creates a table containing strings a,b,c
print(a,b,c) -- tables don
't print directly, we'
ll get back to
this
!!
|
--输出
table: 0050C840 table: 0050C390 table: 00500C958 --这个结果是变化的
例15 其它表tables
-- Lua中表结构和JS中的对象一样可以随时增加或删除(直接赋值nil)属性。
--[[ 读取有多种方式,可以用点“.”的方式,也可以用索引index,不过在Lua有点特殊,首先索引是从一开始,其次index=1并不一定是第一个元素值,比如下面的address[1]=nil,而不是“Wyman Street”,具体的以后在讲]]
1
2
3
4
5
6
7
8
9
|
address={} -- empty address
address.Street=
"Wyman Street"
address.StreetNumber=360
address.AptNumber=
"2a"
address.City=
"Watertown"
address.State=
"Vermont"
address.Country=
"USA"
print(address.StreetNumber, address[
"AptNumber"
])
|
--输出
360 2a
例16 -- if else statement. if else语句
-- Lua中的语句块语法有点类似VB都是以end结束
1
2
3
4
5
6
|
a=1
if
a==1 then --注:
if
和elseif后面都一样需要条件+then
print (
"a is one"
)
else
print(
"a is't one"
)
end
|
--输出
a is one
例17 条件语句
--注:value = test and x or y 等价于我们平时写的三元运算符(“?:”)的效果 value= test?x:y
例18 while语句和repeat until语句
--repeat until 类似于C++里面的for循环
1
2
3
4
5
6
7
8
9
10
|
a=1
while
a~=5
do
-- Lua uses ~= to mean not equal
a=a+1
io.write(a..
" "
)
end
a=0
repeat
a=a+1
print(a)
until a==5
|
例19 for语句
-- for语句有两种变体,一种叫 Numeric for ,一种叫 Generic for 就是例20中的for…in结构
--[[ Numeric for 的语法为:for var=exp1,exp2,exp3 do something end 等价于C#中的:for(int i=exp1; i<=exp2; i+=exp3) { something } ]]
1
2
3
4
5
6
7
8
9
|
-- Numeric iteration form.
-- Count from 1 to 4 by 1.
for
a=1,4
do
io.write(a) end
print()
-- Count from 1 to 6 by 3.
for
a=1,6,3
do
io.write(a) end
|
--输出
1234
14
例20 更多的for语句
--for语句的Generic for变体
1
|
for
xm_key,xm_value in pairs({1,3,5,7})
do
print(xm_key,xm_value) end
|
--输出
1 1
2 3
3 5
4 7
--因此可以用这种方法来打印简单的table
例21 break跳出循环
1
2
3
4
5
6
7
8
9
|
a=0
while
true
do
a=a+1
if
a==10 then
break
end
end
print(a)
|
--输出
10
例22 函数
--[[ 使用函数返回值对多个变量赋值,规则和多参数赋值一样,如果函数返回值多了,则抛弃,少了则少的赋值为nil ]]
1
2
3
4
5
6
|
function myFirstLuaFunctionWithMultipleReturnValues(a,b,c)
return
a,b,c,
"My first lua function with multiple return values"
, 1,
true
end
a,b,c,d,e,f = myFirstLuaFunctionWithMultipleReturnValues(1,2,
"three"
)
print(a,b,c,d,e,f)
|
--输出
1 2 three My first lua function with multiple return values
1 true
例23 变量作用域
--[[ 在Lua中,默认声明的变量为全局变量,以local 为修饰符的为局部变量,局部变量只在所属的语句块内有效]]
例24 字符串格式
--[[ 字符串格式大家可以去参考Lua参考手册“Lua Reference Manual” http://www.lua.org/manual/5.1/index.html
这里重点说明一下在这些例子中第一次见到三个点“…”的作用,在Lua中在函数的参数列表中,表示参数的格式是可变不固定的,当这个函数在被调用时,函数的所有参数都被存储在一个名为arg的表结构中,同时arg还有一个n属性,代表实际传入的可变参数的个数,那么可以通过arg来访问所有的可变参数了,细节的以后再讲]]
1
2
3
4
5
6
|
function
printf
(fmt, ...)
io.write(string.format(fmt, ...))
end
printf
(
"Hello %s from %s on %s\n"
,
os.
getenv
"USER"
or
"there"
, _VERSION, os.date())
|
--输出
Hello there from Lua 5.1 on 14/03/06 11:48:19
Cocos引擎中文官网现面向广大Cocos引擎相关开发者征集优秀教程,欢迎大家投稿!来稿请发送至:support@cocos.org。
来源网址:http://blog.csdn.net/q229827701/article/details/20609399