lua简单入门
一、安装windows下的lua环境,luaforwindows
下载最新的5.3版本,下载地址:
https://sourceforge.net/projects/luabinaries/files/5.3.5/
也可以在gitlab下载:
https://github.com/rjpcomputing/luaforwindows/releases

下载解压
lua53.exe就是lua语言解释器
按住shift鼠标右键,此处打开命令窗口

编写一个简单的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 for windows (lfW)主页:http://luaforwindows.luaforge.net/https://code.google.com/p/luaforwindows ...
- 用IntelliJ IDEA创建Gradle项目简单入门
Gradle和Maven一样,是Java用得最多的构建工具之一,在Maven之前,解决jar包引用的问题真是令人抓狂,有了Maven后日子就好过起来了,而现在又有了Gradle,Maven有的功能它都 ...
- [原创]MYSQL的简单入门
MYSQL简单入门: 查询库名称:show databases; information_schema mysql test 2:创建库 create database 库名 DEFAULT CHAR ...
- Okio 1.9简单入门
Okio 1.9简单入门 Okio库是由square公司开发的,补充了java.io和java.nio的不足,更加方便,快速的访问.存储和处理你的数据.而OkHttp的底层也使用该库作为支持. 该库极 ...
- emacs最简单入门,只要10分钟
macs最简单入门,只要10分钟 windwiny @2013 无聊的时候又看到鼓吹emacs的文章,以前也有几次想尝试,结果都是玩不到10分钟就退出删除了. 这次硬着头皮,打开几篇文章都看完 ...
- 【java开发系列】—— spring简单入门示例
1 JDK安装 2 Struts2简单入门示例 前言 作为入门级的记录帖,没有过多的技术含量,简单的搭建配置框架而已.这次讲到spring,这个应该是SSH中的重量级框架,它主要包含两个内容:控制反转 ...
- Docker 简单入门
Docker 简单入门 http://blog.csdn.net/samxx8/article/details/38946737
- Springmvc整合tiles框架简单入门示例(maven)
Springmvc整合tiles框架简单入门示例(maven) 本教程基于Springmvc,spring mvc和maven怎么弄就不具体说了,这边就只简单说tiles框架的整合. 先贴上源码(免积 ...
- git简单入门
git简单入门 标签(空格分隔): git git是作为程序员必备的技能.在这里就不去介绍版本控制和git产生的历史了. 首先看看常用的git命令: git init git add git comm ...
随机推荐
- python 绘制柱状图
python 绘制柱状图 import matplotlib.pyplot as plt import numpy as np # 创建一个点数为 8 x 6 的窗口, 并设置分辨率为 80像素/每英 ...
- Java8新特性(一)_interface中的static方法和default方法
什么要单独写个Java8新特性,一个原因是我目前所在的公司用的是jdk8,并且框架中用了大量的Java8的新特性,如上篇文章写到的stream方法进行过滤map集合.stream方法就是接口Colle ...
- SqlMapConfig.xml 的配置
jdbc.properties :数据库连接的配置 jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://192.168.181.135:33 ...
- HDU 6468 zyb的面试
http://acm.hdu.edu.cn/showproblem.php?pid=6468 题目 今天zyb参加一场面试,面试官听说zyb是ACMer之后立马抛出了一道算法题给zyb:有一个序列,是 ...
- LuoguP4233 射命丸文的笔记
题目描述 求所有\(n\)个点带标号强连通竞赛图中哈密顿回路数量的平均值. 题解 因为要求平均数,所以我们可以把分母和分子单开来算. \(n\)个点的所有竞赛图的所有哈密顿回路个数是可以求出来的,就是 ...
- ab命令
ab -V -n在测试会话中所执行的请求个数.默认时,仅执行一个请求.请求的总数量 -c一次产生的请求个数.默认是一次一个.请求的用户量 -t测试所进行的最大秒数.其内部隐含值是-n 50000,它可 ...
- babel7-按需加载polyfill
babel7 babel7发布了. 在升级到 Babel 7 时需要注意几个重大变化: 移除对 Node.js 6 之前版本的支持: 使用带有作用域的 @babel 命名空间,以防止与官方 Babel ...
- CF1155E Guess the Root
题意:交互,有一个10次多项式,你可以询问50次当x为某个取值时多项式的值.你需要回答这个多项式的零点. 解:询问11个数然后高斯消元解方程得出系数.然后枚举定义域看有无0点. #include &l ...
- marquee标签的使用
marquee语法 <marquee></marquee> 实例一<marquee>Hello, World</marquee> marquee常 ...
- 我的python中级班学习之路(全程笔记第一模块) (第一章)(第2部分:如何设置python中的字体颜色,猜年龄练习题解答,while else语句,pycharm的使用)
第一章: python 基础语法 第 2 部分: 一.猜年龄练习题解答 直接上代码 >>> age = 26 >>> count = 0 >>&g ...