lua【卤鹅】总结

转自:https://www.cnblogs.com/reblue520/p/10767428.html

编写一个简单的hello world程序

test.lua

如果觉得简单,可以给一个for循环,打印1~10

正常执行,说明lua环境安装没有问题

二.lua语言的基本语法

  1. lua的值和类型

数值:

1,2,3

1.2 3.14

字符类型

"hello world"

Table类型

--lua的table,不需要预定义长度,保证数组在首次赋值的时候在最大索引加1

--没有类型限制

--下标从1开始,自动扩容

--table = 数组+映射

--第一种写法

a={}

a[1]=10

a[2]=20

a[3]="hello"

print(a[1],a[2],a[3])

--第二种写法

a={

10,

20,

"hello"

}

print(a[1],a[2],a[3])

-- 映射的另外写法

a = {}

a["hello"]=2

a[3]=false

print(a.hello, a[3])

--别的写法

a={

["hello"]=2,

[3]=false,

}

print(a.hello,a[3])

  1. lua的函数

-- 加法函数

function add(a,b)

return a+b

end

--调用函数

print(add(1,2))

--调用函数不同的写法

function add(a,b)

return a+b

end

a = add(1,2)

print(a)

--另外的写法

add = function(a,b)

return a+b

end

foo =add

print(foo(1,2))

--函数返回多个值,返回加法和减法

function add(a,b)

return
a+b,a-b

end

print(add(1,2))

  1. lua中多变量的赋值

a,b = 1,2

print(a,b)

--交换变量

a,b = b,a

-- 默认值为nil

a,b = 1

-- 多余的值会忽略

a,b = 1,2,3

  1. lua的表达式

a= 1 + 1

print(a)

a=1

b=2

print((b+2)*3)

-- lua没有 ++

c = 1

c = c + 1

print(c)

5.  lua的逻辑表达式

--and 两个都为true,返回true,否则返回false

--or 任意一个为true,返回true

--not 取反

print(true and false)

6. lua拼接字符串,使用 两个点号
..

print("hello".." world")

7. --lua变量的范围

-- 全局变量

function foo()

a = 1
-- 全局变量

end

foo()

print(a) -- 为1

-- 局部变量 一般使用local关键字修饰 ,我们在lua开发中应该尽量使用local局部变量

function foo()

local a
= 1 -- 局部变量,local为作用域控制关键词,分隔开,利于阅读,还有优化作用

end

foo()

print(a) -- 为nil

8. lua的流程控制,判断和循环

-- 老段子:老婆,包子和西瓜

-- 老婆打电话给程序员老公打了个电话:下班顺路买一斤包子回来,如果看到卖西瓜的就买一个

-- 当天晚上回来程序员带回来一个包子,老婆怒道:你怎么就买了一个包子,程序员:因为我看到了卖西瓜的啊

-- 当看到卖西瓜的就买一个包子,没有看到卖西瓜的就买1公斤包子

if foundWatermelon() then

buy("baozi","1")

else

buy("baozi","1kg")

end

a.while循环,循环打印0-9

local i = 0

while i < 10 do

print(i)

i = i +
1

end

--lua的for数值遍历

--for (int i = 0;i < 10; i ++)

--{

--             printf("%d\n",i);

--}

--打印1到10

for i = 1,10 do

print(i)

end

--等价于

for i = 1,10,1 do

print(i)

end

-- 倒叙打印

for i = 10,1,-1 do

print(i)

end

b. lua的for泛型遍历

for的泛型遍历: pairs() ipairs() 迭代器

-- pairs是内部的函数,功能就是可以把一个table里面的所有部分 全部遍历

a= {

["foo"]=1,

[100]=true,

[1]=20,

[2]=30,

}

for k,v in pairs(a) do

print(k,v)

end

-- ipairs 功能变化了,只遍历数组部分

a= {

["foo"]=1,

[100]=true,

[1]=20,

[2]=30,

}

for k,v in ipairs(a) do

print(k,v)

end

三、lua的包管理

-- lua的包(package)

local c = require("foo") -- 作为文件名搜索,默认搜索当前目录

print(c)

print(c.foo(1,2))

-- foo.lua 的代码

local class={}

function class.foo(a,b)

return a + b

end

-- 另外的写法,class的映射:class.foo,foo键的 值为一个函数

--class.foo = function (a,b)

--             return a + b

--end

-- lua的一个特点,可以把全局代码当做一个值返回

return class

-- 美化后

local socket = require("foo") -- 作为文件名搜索,默认搜索当前目录

print(socket)

print(socket.send(1,2))

-- fooo.lua

local class={}

function class.send(a,b)

return a + b

end

-- 另外的写法,class的映射:class.foo,foo键的 值为一个函数

--class.foo = function (a,b)

--             return a + b

--end

-- lua的一个特点,可以把全局代码当做一个值返回

return class

-- require 加载文件,运行,推荐使用

-- dofile --加载并运行,可以多次加载,老的写法

-- lua从5.3 以后没有dostring功能了

print("require")

for i = 1,2 do

print(require("foo"))

end

print("dofile")

for i = 1,2 do

print(dofile("foo.lua"))

end

-- 运行结果

E:\software\lua5.3>lua53.exe test.lua

require

table: 008182a8 -- table相同,表示同一个

table: 008182a8

dofile

table: 00817c68

table: 0081e350

lua的系统库

-- 批量插入table键值

local t = {}

for i = 1,10 do

table.insert(t,i)

end

for k,v in pairs(t) do

print(k, v)

end

print(t)

-- 删除数组中的元素

table.remove(t,2)

-- 循环打印table 结果:

for k,v in pairs(table) do

print(k, v)

end

E:\software\lua5.3>lua53.exe test.lua

table: 00eb87d0

move    function: 69e96240

sort    function: 69e96ee0

insert  function: 69e96720

remove  function: 69e96550

concat  function: 69e96890

unpack  function: 69e95e30

pack    function: 69e95fa0

--删除元素的另外写法

local t = {}

t.a = 1

t.b = 2

-- 删除一个值

t.a = nil

for k,v in pairs(t) do

print(k, v)

end

获取lua中对象的长度

-- # 可以获取对象的长度,对象一般指的就是字符串和table

local t = {5, 1 ,3 ,4, 12}

local s = "hello world"

-- 得到table的长度

print(#t)

-- 取字符串的长度

print(#s)

-- type获取类型

print(type(s))

-- 字符转换为数字

local a = tonumber("3.14")

print(a, type(a))

-- 数字转换为数字

local b = tostring(3.14)

print(b, type(b))

-- string.format 把一个字符串按照格式构造出来

print(string.format("hi %d", 20))

总结:

原文地址:https://www.cnblogs.com/silentdoer/p/11865675.html

时间: 2024-10-26 01:02:06

lua【卤鹅】总结的相关文章

cocos2dx lua中异步加载网络图片,可用于显示微信头像

最近在做一个棋牌项目,脚本语言用的lua,登录需要使用微信登录,用户头像用微信账户的头像,微信接口返回的头像是一个url,那么遇到的一个问题就是如何在lua中异步加载这个头像,先在引擎源码里找了下可能会提供这个功能的地方,发现好像没有提供类似功能,那么只能自己动手写.所以我在ImageView这个类里面添加了一个成员方法,其实可以不写在ImageView里,而且我觉得非必需情况下还是不要修改引擎源码的好,因为如果源码改动比较多的话,将来引擎版本升级会比较麻烦.我写在ImageView里纯粹是想偷

Lua 第一天

今天开始学习Lua语言,感觉Lua非常便捷.我用的编译器是SciTE,很不错. 举例一:无需引用,内置输出语句   print() print(6)   --> 6 print(type(6))  -->   number 举例二:对数字字符串进行数字化处理 print("2"+3 )  -->5 举例三:..连接俩个字符串,#返回字符串长度 举例四:print()输出函数,可以有多个输出值 a = 1,b =2,c = a+b    print(a,b,c,a,b,

lua协程一则报错解决“attempt to yield across metamethod/C-call boundary”

问题 attempt to yield across metamethod/C-call boundary 需求跟如下帖子中描述一致: http://bbs.chinaunix.net/forum.php?mod=viewthread&action=printable&tid=4065715 模拟一个场景,在C中创建出coroutine来执行Lua脚本,并且提供C API给Lua使用,当某些操作可能会阻塞时(如网络I/O),C函数中执行yield将协程切换出去,然后未来的某个时刻,如果条件

lua闭合函数

function count( ... ) local i = 0 return function( ... ) i = i+ 1 return i end end local func = count(...) print(func()) print(func()) print(func()) 结果如下: 1 2 3 [Finished in 0.1s] lua 闭合函数:一个函数加上该函数所需访问的所有“非局部变量”. 如上所示:count()函数返回了另一个函数,而这个函数使用了count

Mac下Lua Sublime Text2 开发环境搭建

1.安装Lua编译器 下载Lua, http://www.lua.org/: 解压后,cd进入该文件夹src目录下 在当前文件夹执行make macosx   然后回车 cd 到上一目录,执行sudo make install 完成之后执行lua -v 可以看到:Lua 5.3.3  Copyright (C) 1994-2016 Lua.org, PUC-Rio 2.安装Sublime Text2 1.下载http://sublime-text-2.cn.uptodown.com后打开: {

Nginx+Lua 积累

Nginx+Lua 积累 1.解析16进制编码的中文参数 复制代码 local encodeStr = "%E6%B0%94" local decodeStr = ""; for i = 2, #encodeStr - 1, 3 do local num = encodeStr:sub(i, i + 1); num = tonumber(num, 16); decodeStr = decodeStr .. string.char(num); end ngx.say(

nginx与Lua执行顺序

Nginx顺序 Nginx 处理每一个用户请求时,都是按照若干个不同阶段(phase)依次处理的,而不是根据配置文件上的顺序. Nginx 处理请求的过程一共划分为 11 个阶段,按照执行顺序依次是 post-read.server-rewrite.find-config.rewrite.post-rewrite. preaccess.access.post-access.try-files.content.log. post-read: 读取请求内容阶段 Nginx读取并解析完请求头之后就立即

在 Lua 里 使用 Cocos Studio 导出的 .csb 文件

1. 加载 节点到场景 第一种方法 local scene = cc.CSLoader:createNode("scene.csb") self:addChild(scene) 第二种方法 local scene = cc.uiloader:load("MainScene.csb"):addTo(self) 2.强转精灵类型 local sprite = tolua.cast(object,"cc.Sprite") CocoStudio 做的里面

深入lua栈交互—cpp调用lua数据

lua是通过lua_state这个栈来和c 交互的 1.....lua栈 index 下往上增长 如: 1 2 3 4 5 6 2.....lua栈 index 是循环的 如下 index 上到下 是 3 2 1 0 -1 -2 -3 ,栈对应的值为     1     2     3     x     1     2     3      3......lua函数多个返回值如果上面是function返回了3个返回值,那么return a ,b,c  中 a=3 b=2 c=1 第一个返回值先