Lua 语言学习教程

Lua 基本语法

print("Hello World!")
-- 单行注释

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

---[[
print('取消多行注释')
--]]

--[ 定义变量 --]
  • 多行注释推荐使用 --[=[注释内容]=],这样可以避免遇到table[table[idx]]时就将多行注释结束了。
  • 最好不要使用下划线加大写字母的标示符,因为Lua的保留字也是这样的。
  • 在默认情况下,变量总是认为是全局的。

Lua 数据类型

  • Lua 是动态类型语言,变量不要类型定义,只需要为变量赋值。

nil(空)


  • nil = 空。
  • nil 作比较时应该加上双引号 type(X)=="nil"

boolean(布尔)


  • Lua 把 false 和 nil 看作是"假",其他的都为"真"。

number(数字)


  • Lua 默认只有一种 number 类型 -- double(双精度)类型。

string(字符串)


  • 字符串由一对双引号或单引号来表示。
  • 也可以用 2 个方括号 "[[]]" 来表示"一块"字符串。
html = [[
菜鸟
学习
]]
print(html)
  • 在对一个数字字符串上进行算术操作时,Lua 会尝试将这个数字字符串转成一个数字。
    -字符串连接使用的是 ..
> print("a" .. 'b')
ab
  • 使用 # 来计算字符串的长度,放在字符串前面.
> len = "www.runoob.com"
> print(#len)
14

table(表)


  • 在 Lua 里表的默认初始索引一般以 1 开始。

function(函数)


  • function 可以以匿名函数(anonymous function)的方式通过参数传递。

thread(线程)


  • 线程跟协程的区别:线程可以同时多个运行,而协程任意时刻只能运行一个,并且处于运行状态的协程只有被挂起(suspend)时才会暂停。

userdata(自定义类型)


  • 可以将任意 C/C++ 的任意数据类型的数据(通常是 struct 和 指针)存储到 Lua 变量中调用。

Lua 变量

  • Lua 变量有三种类型:全局变量、局部变量、表中的域。
  • 用 local 显式声明为局部变量,局部变量的作用域为从声明位置开始到所在语句块结束。

赋值语句


  • 赋值语句右边的值会依次赋给左边的变量,遇到赋值语句Lua会先计算右边所有的值然后再执行赋值操作,可以这样进行交换变量的值。
x, y = y, x                     -- swap 'x' for 'y'
  • 应该尽可能的使用局部变量,有两个好处:
  1. 避免命名冲突;
  2. 访问局部变量的速度比全局变量更快。

索引


  • 对 table 的索引使用方括号 []。Lua 也提供了 . 操作。
t[i]
t.i                 -- 当索引为字符串类型时的一种简化写法

Lua 循环


  • while循环

while(condition)
do
   statements
end
  • for 循环

1. 数值for循环

for var=exp1,exp2,exp3 do  
    <执行体>  
end  
-- var 从 exp1 变化到 exp2,每次变化以 exp3 为步长递增 var,并执行一次 "执行体"。exp3 是可选的,如果不指定,默认为1。

2. 泛型for循环

--打印数组a的所有值  
a = {"one", "two", "three"}
for i, v in ipairs(a) do
    print(i, v)
end 
-- i是数组索引值,v是对应索引的数组元素值。ipairs是Lua提供的一个迭代器函数,用来迭代数组。

pairs 能迭代所有键值对
ipairs 可以想象成 int+pairs,只会迭代键为数字的键值对。

  • repeat...until 循环

repeat
   statements
until( condition )
-- 在条件进行判断前循环体都会执行一次
  • 循环嵌套

repeat
   statements
   repeat
      statements
   until( condition )
until( condition )

还可以使用不同的循环类型来嵌套。

  • break 语句

如果你使用循环嵌套,break语句将停止最内层循环的执行,并开始执行的外层的循环语句。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,907评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,987评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,298评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,586评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,633评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,488评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,275评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,176评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,619评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,819评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,932评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,655评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,265评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,871评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,994评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,095评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,884评论 2 354

推荐阅读更多精彩内容

  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 13,797评论 0 38
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 6,415评论 0 17
  • lua闭包 函数尾调用 迭代器
    Lee坚武阅读 1,349评论 0 50
  • 最终,我们都没有错过承诺,是时间抛弃了你我,正如歌中唱的那样“不必抱愧当初承诺太重,聚散无常怨谁错。” ...
    岁月裹的你很干净阅读 469评论 0 0
  • 1 每天英语花一个小时 ,假期另当别论 2 数分和高数每天两小时的看书任务 几何半个小时,不包括做作业 3计算机课...
    shudan阅读 101评论 0 0