Lua语言入门(一)

开篇

1、几个连续语句之间不需要分割符,但也可以使用分号分割。 比如: a = 1 b = 2等价于a = 1; b= 2

2、lua解释器对于大型程序块处理不会有任何问题。

3、在交互模式中执行代码 或 将程序代码保存到一个文件中再执行,退出交互模式:调用os.exit(),或输入 end of file控制符(windows上是ctrl + z, unix上是Ctrl + d)。

4、lua -i hello.lua :-i参数,会让先执行hello中的代码,然后进入交互模式。

5、dofile(filename):加载程序库(执行文件中的代码)

6、lua区分大小写,名字和java语法相似。

7、lua的注释,行注释:--;多行注释:--[[ 代码 --]]

8、lua的全局变量:访问一个未初始化的变量不会引发错误,访问结果是一个特殊值 nil,删除每个变量执行将其赋值为nil

9、lua解释器执行程序:lua [选项参数] [脚本[参数]]

-e:可以直接在命令行输入代码
-l:加载库文件
-i:运行完代码,进入交互模式


类型与值

10、lua有8中基础类型:
nil(空):表示无效,

boolean(布尔):true or false;lua将false和nil视为假,0和空字符串视为真,

number(数字):实数,lua没有整数和浮点数之分,可以使用科学计算法、

string(字符串):lua字符串是不可变值,不能直接修改字符串中的某个字符,而应该创建一个新的字符串,

a = "one string";
 b = string.gsub(a, "one", "anothor"); 

字符串可以使用单引号或双引号;包含类型C语言的转义;多行字符串([[ "" ]]):

page = [[
<html>
<head>
</head>
</html>
]];

字符串连接:.. ,例如

print(10 .. 20);

转换字符串:tostring(10);
字符串长度:在字符串前面放置操作符“#”获取字符串长度,

print(#str)

userdata(自定义类型):userdata用于表示一种由应用程序或C创建的新类型,标准IO库就用userdata表示文件的,可以将任意C数据存储到lua变量中、

function(函数):可以存储在变量中,可以通过参数传递给其它函数,可以作为其它函数的返回值;lua所有的标准库都是用C写的,lua和C可以互调、

thread(线程):后面再讲、

table(表):--[[
是一个关联数组,“关联数组”是一种具有特殊索引方式的数组;
大小可变;
lua通过table表示模块、包、对象。io.read 表示 io模块中的read函数,而对于lua这表示使用字符串“read”作为key来索引table io;
table是对象,可以看做一个“匿名对象”,lua不会暗中产生table的副本或创建新的table,仅持有一个引用;
创建空table:a = {};最简单的表达式就是“{}”;
table变量与table自身之间没有固定的关联性,属性可以自由的加入和取出;添加或修改:a["x"] = 10; 删除:a["x"] = nil;

--[[
a = {}
x = "y"
a[x] = 10
]]

a["y"] 等价于 a.y;a.y表示key为y来索引table;

表示数组和线性表:用整数作为key来使用table;自动生成的索引从1开始;
数组或线性表的长度获取:“#”操作符,和字符串用法一致,Lua将nil作为界定数组结尾的标志,如果数组有中间含有nil时,操作符会认为这些nil元素就是结尾标志;
返回table的最大正索引数:table.maxn;
]]

11、print(type(a)):打印变量类型。


表达式

12、算术操作符:和其它语言基本一致。

13、关系操作符:和其它语言唯一区别是“!=” 变成了 “~=”;table、userdata和函数都是做“引用比较”,只有当它们引用引用同一个对象时,才认为它们相等;除字符串和数字之外的其它类型只能相等或不等比较;不同类型之间大小比较直接导致错误;

14、逻辑操作符(and,or,not):与条件控制语句一致,所有逻辑操作符将false和nil视为假,其它任何东西视为真;操作符规则和其它语言一致;

15、操作符优先级:“^”和“..”是右结合,其它都是左结合。

16、table的构造:
空构造:a = {}

构造数组:a = {"1", "2", "3", "4", "5"}

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

添加属性:a.x = 1,如果table a中有key为“x”的属性,该语句为修改,如果没有就会添加“x”到table中。(有点像JavaScript那么随意)

删除属性:a.x = nil
初始化方式嵌套:

a = {name = "android", {x = 1, y = 2}, {x = 3, y = 4}}

访问:

a.name   ---> android
a["name"]    ---> android
a[1]     ---> 1

table可以在最后一个元素后面写一个逗号;可以用“;”“,”分隔元素

{x = 1,  y = 2, "x"; "y", }

语句

17、多重赋值:

a, b, c = 1, 2
x, y = y, x

若值的个数少于变量个数,那么多余的变量会被赋为nil;若值的个数更多的话,那么多余的值会被直接丢弃掉;

18、局部变量:local修饰变量, 例:local a = 1;

19、显示的定义一个程序块:使用关键字:do - end

do
   local a = 1
   local d = a*2
   c = a+b
end

20、控制语句,lua不支持switch语句
if - elseif - else - end

if a>0 then
 a=1
end
if a>0 then
 a = 1
else
 a = -1
end
if a>0 then
 a = 1
elseif a == 0 then
 a = -1
else
 a = 0
end

while

local i = 1
while a[i] do
 print(a[i])
 i = i+1
end

repeat - until

repeat
 line = io.read()
until line ~= ""
local sqr = x/2
repeat
 sqr = (sqr + x/sqr)/2
 local  error = math.abs(sqr^2 - x)
until error < x/10000 --在这里还能访问循环体中的局部变量

21、for

for i=exp1,exp2,exp3 do
 print(i)
end

表示 i 从exp1变化到exp2,每次都以exp3作为步长递增,exp3可缺省则默认为1,并执行一个“执行体”。
exp1,exp2,exp3都是在循环开始前一次性求值,只会执行一次;控制变量 i 会被自动什么为for语句的局部变量,仅在循环体内可见。

22、泛型for

for i,v in ipairs(table_name) do
 print(i,v)
end

迭代器ipairs,用于遍历数组的迭代器函数,每次在循环中,i 会被赋予一个索引值,同时 v 被赋予对应的元素值。

23、break 与 return
break:结束当前循环
return:结束当前程序块,只能放在end、else、until前一条,其它地方要么不起作用,要么报错。

function fun()
   return --这里不起作用

   do
   return --这样就可以不执行函数后面的语句,直接跳出函数了
   end

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

推荐阅读更多精彩内容