lua的下载

http://luabinaries.sourceforge.net/
点击所要下载的版本
比如我下的是5.3.3
https://sourceforge.net/projects/luabinaries/files/5.3.3/
下载windows下二进制文件
lua-5.3.3_Win32_bin.zip

解压完后

在同目录下建立test.lua

print("hello lua");
for i=,, do
print(i)
end

执行

E:\lua>lua53 test.lua
hello lua

for i=起始值,结束值,步长
步长可以省略 默认是1

lua的值和类型

字符串和布尔

test.lua

a="abc"
b=false
c=true
d='ds'
e=3.1415926
print(a,b,c,d,e);

E:\lua>lua53 test.lua

abc false true ds 3.1415926

lua的比较操作符

操作符

说明

==

比较两个操作数的类型和值是否都相等

~=

与==结果相反

<,>,<=,>=

 
--数字操作符的操作数如果是字符串会自动转换成数字
a=+
b=+''
--c=1+'c' 出错
print(a,type(a),b,type(b),a==b) --2 number 2.0 number true --比较操作符不同于数学操作符,不会对操作数的类型自动转换
print(=='') --false
print({'a'}=={'a'}) --false print(tonumber('F',)) --

lua中的table
table=数组+映射
lua中单行注释 --
块注释
--[[

]]

数组
数组的下标识从1开始的而不是0
数组的下标必须连续,否者就是映射了

a={,,"lua"}
--[[
或者
a={}
a[1]=10
a[2]=20
a[3]="lua"
]] print(a[],a[],a[]);

E:\lua>lua53 test.lua
10 20 lua

映射

a={
["key1"]=,
[]=false
}
--[[
或者
a={}
a['key1']=10
a[2]=false
]]
print(a.key1,a[]);

lua函数
函数的调用必须在声明的后面(代码的位置顺序)
test.lua

function add(a,b)
return a+b
end
add1=function ( a,b)
return a+b
end
print(add(,))
print(add1(,))

E:\lua>lua53 test.lua
3
3

函数的多返回值

function add(a,b)
return a+b,a-b,a*b
end
r=add(,);
print(add(,))
print(r,type(r));

E:\lua>lua53 test.lua
7 -3 10
7 number

可以在Lua中创建一个具有可变参数的函数...作为它的参数

function average(...)
result =
local arg={...}
for i,v in ipairs(arg) do
result = result + v
end
return result/#arg
end print("The average is",average(,,,,,))

E:\lua>lua53 test.lua
The average is 3.5

多变量的赋值和值的交换

a,b=,
print(a,b)
a,b=b,a
print(a,b)
c,d=
print(c,d)
e,f=,,
print(e,f)
g,h=,
print(g,h) 
E:\lua>lua53 test.lua

       nil

nil     nil

多重赋值时,lua会先计算所有表达式的值

local a= {,,}
local i=
i,a[i]=i+,
print(i) --
for k1,v1 in ipairs(a) do
print(k1,v1)
end --[[
2
1 5
2 2
3 3
]]

lua计算完所有表达式的值后,上面最后一个赋值语句成为

i,a[1]=2,5

lua的表达式逻辑操作符

只要操作数不是nil或者false,逻辑操作符就认为操作数为真

操作符

说明

not

根据操作数的真假相应的返回false和true

and

a and b 中a 为真返回b,否者返回a

or

a or b中a是假则返回a ,否者返回b

print( and )  --
print( or ) --
print(not ) --false
print(not ) --false
print('' or ); --''
print(true and false)
print(true and true)
print(true or false)
print(not true)
print(not false) --字符串拼接
print("hello".." world");
E:\lua>lua53 test.lua
false
true
true
false
true
hello world

作用域

function fun()
a=
local b=
end
fun()
print(a,b)
E:\lua>lua53 test.lua
nil
local x =
if true then
local x=x+
print(x)
do
local x=x+
print(x)
end
print(x)
end
print(x)
--[[
执行结果
11
12
11
10
]]

lua的流程控制
if elseif

a=
if(a>) then
print("a>1")
elseif(a<) then
print("a<1")
else
if(a==) then
print("a=1")
else
print("a is not num")
end
end

a必须是数字,否者不能参与比较
elseif不可以写成else if lua里没i++

while

local i=
while i< do
print(i)
i=i+
end

repeat
statement(s)
until( condition )

i=
repeat
print(i);
i=i+
until(i>)

for循环
for i=起始值,终点值,步长
步长可以省略 默认是1

for i=, do
print("i="..i)
end
for j=,, do
print("j="..j)
end
E:\lua>lua53 test.lua
i=
i=
i=
i=
i=
i=
i=
i=
i=
i=
j=
j=
j=
j=
j=

for的泛型遍历

迭代器
pairs() 遍历table里的所有元素
ipairs() 只遍历数组(必须1开始的键 而且必须连续)

迭代器 http://www.cnblogs.com/HKUI/articles/6757372.html

a={
['a']='ajax',
[]=true,
[]=,
[]=
}
for k,v in pairs(a) do
print(k,v)
end
print("----------------------")
for k1,v1 in ipairs(a) do
print(k1,v1)
end
2次运行,对于pairs顺序完全是没有保障的
E:\lua>lua53 test.lua
true a ajax
---------------------- E:\lua>lua53 test.lua
true
a ajax ----------------------
a={
['a']='ajax',
[]=,
[]=true,
[]=
}
for k,v in pairs(a) do
print(k,v)
end
print("----------------------")
for k1,v1 in ipairs(a) do
print(k1,v1)
end
E:\lua>lua53 test.lua
a ajax
true

二维或多维数组

arr={
{'a','b','c'},
{'aa','bb','cc'},
{['a']='ajax'} }
for k,v in pairs(arr) do
for k1,v1 in pairs(v) do
print(k..'-'..k1,v1)
end
end
E:\lua>lua53 test.lua
- a
- b
- c
- aa
- bb
- cc
-a ajax

lua里的包

同目录下有 foo.lua,test.lua
foo.lua

local class={}
function class.foo( a,b )
return a+b
end
return class

test.lua

local c=require("foo")
print(c);
print(c.foo(,)) for i=, do
print(require("foo"))
end
print("-------------")
for i=, do
print(dofile("foo.lua"))
end
E:\lua>lua53 test.lua
table: table:
table:
-------------
table: 0003bcf8
table: 0003bcd0

require与dofile
require运行多次 ,对于同一个table 只加载一次
dofile运行多次,对于同一个table,每次都是重新加载

lua的系统库

local t={}
for i=, do
table.insert(t,i..'_'..i)
end for k,v in pairs(t) do
print(k..'='..v)
end
print("----------");
table.remove(t,)
for k,v in pairs(t) do
print(k..'='..v)
end for k,v in pairs(table) do
print(k,v)
end

运行

E:\lua>lua53 test.lua
=1_1
=2_2
=3_3
=4_4
=5_5
----------
=1_1
=3_3
=4_4
=5_5
sort function:
move function:
insert function: 62995e00
remove function: 62995c40
pack function:
concat function: 62995fa0
unpack function: 62994fc0

对于映射的删除需用赋值nil

local t={}
t.a="ajax"
t.b="bbc"
for k,v in pairs(t) do
print(k,v)
end
table.remove(t,a)
print("------------");
for k,v in pairs(t) do
print(k,v)
end
print("---------")
t.a=nil
for k,v in pairs(t) do
print(k,v)
end

执行

E:\lua>lua53 test.lua
a ajax
b bbc
------------
a ajax
b bbc
---------
b bbc

数组长度和字符串长度

local t={
['a']="ajax",
['b']="bbc",
[]=,
[]=
}
print("t len= "..#t);
local t1={,,,}
print("t1 len= "..#t1) local str="php7"
print("str len= "..#str)
E:\lua>lua53 test.lua
t len=
t1 len=
str len=

tonumber,tostring
string.format() 类似c中printf

a="3.14"
print(a,type(a));
a=tonumber(a)
print(a,type(a)); b=3.1415
print(b,type(b))
b=tostring(b)
print(b,type(b)) person="tom"
print(string.format("hello %s",person))
E:\lua>lua53 test.lua
3.14 string
3.14 number
3.1415 number
3.1415 string
hello tom

 lua字符串操作

1.单引号之间的字符
2.双引号之间的字符
3.[[]]

test.lua
str1='php'
str2="javascript"
str3=[[php7]]
str4="php \" best\" "
str5='php "best"'
str6=[[php "best"]]
print("str1="..str1)
print("str2="..str2)
print("str3="..str3)
print("str4="..str4)
print("str5="..str5)
print("str6="..str6)
E:\lua>lua53 test.lua
str1=php
str2=javascript
str3=php7
str4=php " best"
str5=php "best"
str6=php "best"

字符串操作方法

for k,v in pairs(string) do
print(k)
end
E:\lua>lua53 test.lua
gsub
gmatch
match
len
byte
char
lower
sub
format
upper
dump
rep
find
unpack
packsize
pack
reverse
test.lua
s="php5 pHp7"
lower_s=string.lower(s)
upper_s=string.upper(s)
gsub=string.gsub(s,'php','python')
reverse=string.reverse(s)
rep=string.rep('p',) print("lower_s="..lower_s)
print("upper_s="..upper_s)
print("gsub="..gsub)
print("reverse="..reverse)
print("rep="..rep) E:\lua>lua53 test.lua
lower_s=php5 php7
upper_s=PHP5 PHP7
gsub=python5 pHp7
reverse=7pHp 5php
rep=ppp

lua语法基本的更多相关文章

  1. 转:OpenResty最佳实践(推荐了解lua语法)

    看点: 1. Lua 语法的说明, 排版清晰易懂. 转: https://moonbingbing.gitbooks.io/openresty-best-practices/content/lua/m ...

  2. 让Xcode Lua 语法高亮

    本人不太喜欢用code ide 还是喜欢XCODE的风格 1.让Xcode支援Lua语法高亮(Syntax Highlighting) 1. 下载https://github.com/breinhar ...

  3. Lua语法要点

    本文在我的独立博客中的链接:https://www.bughui.com/2017/04/01/lua-grammar-points/ 这篇文章其实是我在四月一号发布的,由于我重新注册了一个博客园帐号 ...

  4. lua 语法的使用总结

    1.字符串连接 local tmp = "abc" local tmp1 = "ddd" tmp..tmp1 2. table 类型 就是关联数组 local ...

  5. Lua语法基础(2)--基本语法、函数

    上一篇编辑编辑着,发现,缩进出了问题.作为一个不是强迫症的人,实在是忍受不了同一级内容不同缩进方式的槽点,于是重开一篇吧.(万幸,这样的文章也只有我自己看.) 第四 基本语法 赋值语句,Lua可以对多 ...

  6. Lua语法要点2

    [Lua语法要点2] 1.Lua函数 function 可以添加 local 关键字.添加后为局部函数,不添加(默认)为全局函数.return 可以返回多个返回值,以, 分隔. 使用 ... 来表示变 ...

  7. ios waxpatch lua语法

    Wax Lua 使用方法 说一下 Wax 的特点,它支持你在脚本里使用任何 OC 的类,同样也支持你创建一个类. 使用一个类时你会这样使用: 1 2 NSString -- Returns the N ...

  8. Lua语法

    1.Lua保留的关键字: and,bread,do,else,elseif,end,false,for,function,if,in,local,nil,not,or,repeat,return ,t ...

  9. Lua语法基础(1)---简介、基本数据类型、表达式

    我觉得我已经陷入了一个坑内.因为,安装了Lua和SublimeText3编辑器之后,怎么使自己编写的lua代码在untiy内运行起来,是个我完全不了解的机制.先放一放吧.首先,来回顾一下Lua的语法基 ...

  10. 热更新(一) 之Lua语法的学习

    热更新 如热更新果需要更换UI显示,或者修改游戏的逻辑,这个时候,如果不使用热更新,就需要重新打包,然后让玩家重新下载(浪费流量和时间,体验不好).热更新可以在不重新下载客户端的情况下,更新游戏的内容 ...

随机推荐

  1. 给定字符串数组,用map的key保存数组中字符串元素,value保存字符串元素出现次数,最后统计个字符串元素出现次数

    import java.util.HashMap; public class map1 { public static void main(String[] args) { String[] arra ...

  2. HTML5 ——web audio API 音乐可视化(二)

    上一篇 web audio API 音乐可视化(一)介绍了一些基本的API,以及如何简单的播放一个音频,本篇介绍一下怎么对获取到的音频进行分析,并将分析后的数据绘制成图像. 最终效果请戳这里; 完整版 ...

  3. echarts的散点图

    目前页面中有一个故障数据,做成散点图的效果,打算用echarts 来实现,国内的图表类其实选择挺多的,个人觉得echarts是比较好用的,来看看它有什么优点,一时中文的,联合百度地图,很多都对国内很友 ...

  4. C++(十八) — 内存模式、堆和栈

    1.内存模式 一个程序执行时,先复制到内存,然后CPU逐句读取指令执行. 每个存储单元存放一个字节(8bit)数据,每个有一个唯一的地址,地址是顺序编码的.比如:一台计算机256MB内存,则有256* ...

  5. JsonTools 工具类

    import net.sf.json.JSONObject; public class JsonTools { public static JSONObject getJSONObject(Strin ...

  6. 数据挖掘算法Analysis Services-基于SQL Server的数据挖掘

    数据挖掘算法(Analysis Services – 数据挖掘) data mining algorithm is a set of heuristics and calculations that ...

  7. 一次完整的HTTP请求

    HTTP通信机制是在一次完整的HTTP通信过程中,Web浏览器与Web服务器之间将完成下列7个步骤: 1:建立TCP连接,TCP的三次握手 在HTTP工作开始之前,Web浏览器首先要通过网络与Web服 ...

  8. 剑指offer--36.整数中1出现的次数(从1到n整数中1出现的次数)

    暴力挨个数 ---------------------------------------------------------------------- 时间限制:1秒 空间限制:32768K 热度指 ...

  9. Java IO流读写文件的几个注意点

     平时写IO相关代码机会挺少的,但却都知道使用BufferedXXXX来读写效率高,没想到里面还有这么多陷阱,这两天突然被其中一个陷阱折腾一下:读一个文件,然后写到另外一个文件,前后两个文件居然不 ...

  10. ng 指令的自定义、使用

    1.创建和使用var app = angular.module('myApp',['ng']);app.directive('指令名称',func); 自定义指令的命名:驼峰式,有两部分构成,前缀一般 ...