转自: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))

总结:

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

  1. lua执行字节码的过程介绍

    前面一篇文章中介绍了lua给下面代码生成最终的字节码的整个过程,这次我们来看看lua vm执行这些字节码的过程. foo = "bar" local a, b = "a& ...

  2. lua 学习笔记(1)

    一.lua函数赋值与函数调用         在lua中函数名也是作为一种变量出现的,即函数和所有其他值一样都是匿名的,当要使用某个函数时,需要将该函数赋值给一个变量,这样在函数块的其他地方就可以通过 ...

  3. 在redis中使用lua脚本让你的灵活性提高5个逼格

    在redis的官网上洋洋洒洒的大概提供了200多个命令,貌似看起来很多,但是这些都是别人预先给你定义好的,但你却不能按照自己的意图进行定制, 所以是不是感觉自己还是有一种被束缚的感觉,有这个感觉就对了 ...

  4. 使用Nginx+Lua代理Hadoop HA

    一.Hadoop HA的Web页面访问 Hadoop开启HA后,会同时存在两个Master组件提供服务,其中正在使用的组件称为Active,另一个作为备份称为Standby,例如HDFS的NameNo ...

  5. 打印Lua的Table对象

    小伙伴们再也不用为打印lua的Table对象而苦恼了, 本人曾也苦恼过,哈哈 不过今天刚完成了这个东西, 以前在网上搜过打印table的脚本,但是都感觉很不理想,于是,自己造轮子了~ 打印的效果,自己 ...

  6. lua解析赋值类型代码的过程

    我们来看看lua vm在解析下面源码并生成bytecode时的整个过程: foo = "bar" local a, b = "a", "b" ...

  7. 怎么调试lua性能

    怎么调试lua性能 我们的游戏使用的是Cocos2dx-lua 3.9的项目,最近发现我们的游戏.运行比较缓慢.想做一次性能优化了.其实主要分为GPU.CPU的分别优化.GPU部分的优化.网上有很多优 ...

  8. Lua 安全调用 metatable 的简单应用

    事情的经过 我们的项目中存在好几个战斗界面,不过界面中的内容略有不同.跟同事出去吃饭的时候,他问我.我们现在的战斗界面.有很多是重复的,但是也有偶尔几个地方不太一样.我在战斗过程中驱动这些界面的时候. ...

  9. 让Lua自己把文件夹下面的所有文件自动加载起来吧

    没有想到我也做了一回标题党.其实这里边说的自动还是有夸大其词的部分.其实只是指定文件夹,然后根据指定文件夹数据,加载目录下边的内容而已. 怎么来进行Lua文件的加载 一般情况下,相关的功能需要给他创建 ...

随机推荐

  1. Docker部署ngnix静态网站

    Hello World 首先获取ngnix镜像(默认的是最新版. docker pull nginx 先来编写一个最简单的Dockerfile,一个Dockerfile修改该Nginx镜像的首页 Do ...

  2. OpenCV 学习笔记(5) 使用opencv打开笔记本摄像头

    #include "stdafx.h" #include <opencv2\opencv.hpp> #include <iostream> #include ...

  3. MongoDB 部署复制集(副本集)

    部署MongoDB复制集(副本集)   环境 操作系统:Ubuntu 18.04 MongoDB: 4.0.3 服务器 首先部署3台服务器,1台主节点 + 2台从节点 3台服务器的内容ip分别是: 1 ...

  4. 【BIEE】使用BIPublisher做报表时,选择多个参数使用IN的问题

    在使用BIPublisher做报表的时候,报表出现xml数据加载错误的情况 环境描述 仪表盘提示是表示变量,并且支持多选 报表使用xdo方式制作的,直接使用JDBC直连数据库获取数据 数据集中的SQL ...

  5. R语言中的管道操作符 %>% %T>% %$% %<>%

    magrittr 包的官网 https://magrittr.tidyverse.org/ magrittr 包的 github 主页 https://github.com/tidyverse/mag ...

  6. mercurial branch name use integer as a name

    问题:mercurial branch name use integer as a name 解决: 到安装目录下找到mercurial/scmutil.py文件(我的:/usr/local/Cell ...

  7. 《京东上千页面搭建基石——CMS前后端分离演进史》阅读笔记

    一.背景 CMS即内容管理系统,目的是用于快速进行网站建设或者网页开发. 对于京东网站部门来说,CMS核心目的是用来快速开发和上线各种页面,诸如各种垂直频道页. 二.CMS核心目的 进行数据和模板的统 ...

  8. IIS基本设置、回收机制、性能、并发、安全性

    通常把站点发布到IIS上运行正常后,很少会去考虑IIS提供的各种参数,如何配置才是最适合当前站点运行需要的?这篇文章,从基本设置.回收机制.性能.并发.安全性等IIS设置讲解应当如何优化. 先来“II ...

  9. shell之批量新增用户脚本(http-basic-auth)

    user.txt(用户名记录文件) test001@.com test002@.com user.sh(shell脚本): for line in `cat user.txt` do echo $li ...

  10. 【Gamma】Scrum Meeting 1 & 与助教谈话

    前言 Gamma阶段第1次会议在5月26日22:00由PM在大运村一公寓三层召开, 时长30min. 任务分配 姓名 今日任务 明日任务 困难 周博闻 用户控制器解耦和注释 用户控制器解耦和注释 周国 ...