lua【卤鹅】总结
转自:https://www.cnblogs.com/reblue520/p/10767428.html
编写一个简单的hello world程序
test.lua
如果觉得简单,可以给一个for循环,打印1~10
正常执行,说明lua环境安装没有问题
二.lua语言的基本语法
- 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])
- 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))
- lua中多变量的赋值
a,b = 1,2
print(a,b)
--交换变量
a,b = b,a
-- 默认值为nil
a,b = 1
-- 多余的值会忽略
a,b = 1,2,3
- 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))
总结:
lua【卤鹅】总结的更多相关文章
- lua执行字节码的过程介绍
前面一篇文章中介绍了lua给下面代码生成最终的字节码的整个过程,这次我们来看看lua vm执行这些字节码的过程. foo = "bar" local a, b = "a& ...
- lua 学习笔记(1)
一.lua函数赋值与函数调用 在lua中函数名也是作为一种变量出现的,即函数和所有其他值一样都是匿名的,当要使用某个函数时,需要将该函数赋值给一个变量,这样在函数块的其他地方就可以通过 ...
- 在redis中使用lua脚本让你的灵活性提高5个逼格
在redis的官网上洋洋洒洒的大概提供了200多个命令,貌似看起来很多,但是这些都是别人预先给你定义好的,但你却不能按照自己的意图进行定制, 所以是不是感觉自己还是有一种被束缚的感觉,有这个感觉就对了 ...
- 使用Nginx+Lua代理Hadoop HA
一.Hadoop HA的Web页面访问 Hadoop开启HA后,会同时存在两个Master组件提供服务,其中正在使用的组件称为Active,另一个作为备份称为Standby,例如HDFS的NameNo ...
- 打印Lua的Table对象
小伙伴们再也不用为打印lua的Table对象而苦恼了, 本人曾也苦恼过,哈哈 不过今天刚完成了这个东西, 以前在网上搜过打印table的脚本,但是都感觉很不理想,于是,自己造轮子了~ 打印的效果,自己 ...
- lua解析赋值类型代码的过程
我们来看看lua vm在解析下面源码并生成bytecode时的整个过程: foo = "bar" local a, b = "a", "b" ...
- 怎么调试lua性能
怎么调试lua性能 我们的游戏使用的是Cocos2dx-lua 3.9的项目,最近发现我们的游戏.运行比较缓慢.想做一次性能优化了.其实主要分为GPU.CPU的分别优化.GPU部分的优化.网上有很多优 ...
- Lua 安全调用 metatable 的简单应用
事情的经过 我们的项目中存在好几个战斗界面,不过界面中的内容略有不同.跟同事出去吃饭的时候,他问我.我们现在的战斗界面.有很多是重复的,但是也有偶尔几个地方不太一样.我在战斗过程中驱动这些界面的时候. ...
- 让Lua自己把文件夹下面的所有文件自动加载起来吧
没有想到我也做了一回标题党.其实这里边说的自动还是有夸大其词的部分.其实只是指定文件夹,然后根据指定文件夹数据,加载目录下边的内容而已. 怎么来进行Lua文件的加载 一般情况下,相关的功能需要给他创建 ...
随机推荐
- linux MySQL5.7 rpm安装(转)
删除旧包: # rpm -qa | grep -i mysql # rpm -ev mysql-libs-* --nodeps 安装rpm包: # rpm -ivh mysql-community-c ...
- Bzoj 3343: 教主的魔法(分块+二分答案)
3343: 教主的魔法 Time Limit: 10 Sec Memory Limit: 256 MB Description 教主最近学会了一种神奇的魔法,能够使人长高.于是他准备演示给XMYZ信息 ...
- 利用iptables做端口转发
需求背景: A与C不在同一网段无法直接访问,而A和B,C和B可以互通.现需要A借助B访问C的3306端口. 解决方案: 利用iptables配置规则,实现端口转发. 具体操作: 在B上开启端口转发功能 ...
- 多浏览器书签同步插件EverSync
有时上网时会遇到浏览器不能正常显示的问题.(比如我的火狐浏览器无法正确显示微信公众号管理后台,在chrome上可以正常显示),所以我的电脑里安装了chrome和firefox两个浏览器.但是时间长了, ...
- Centos7 U盘安装&命令大全
软件下载 1.centos下载,下载地址https://www.centos.org/download/ 我选择的镜像是:CentOS-7-x86_64-DVD-1804.iso 2.UltraISO ...
- mvn常见参数命令讲解
关于-N -N,--non-recursive Do not recurse into sub-projects 意思是,不递归到子项目(子模块). 举例: 一个父项目下Father面有3个子项目A. ...
- SpringBoot(十六):SpringBoot2.1.1集成fastjson,并使用fastjson替代默认的MappingJackson
springboot2.1.1默认采用的json converter是MappingJackson,通过调试springboot项目中代码可以确定这点.在springboot项目中定义WebMvcCo ...
- centos7 python2.7升级至python3.5.3版本
1.wget https://www.python.org/ftp/python/3.5.3/Python-3.5.3.tgz #下载安装包 2.tar -zxvf Python-3.5.3 ...
- postgresql cstore_fdw安装与性能测试
据介绍,cstore_fdw实现了 PostgreSQL 数据库的列式存储.列存储非常适合用于数据分析的场景,数据分析的场景下数据是批量加载的.这个扩展使用了Optimized Row Columna ...
- A Full Hardware Guide to Deep Learning深度学习电脑配置
https://study.163.com/provider/400000000398149/index.htm?share=2&shareId=400000000398149( 欢迎关注博 ...