我和Lua并非一见钟情,我们期待着日久生情(相遇篇)
Lua作为一款轻量级的脚本语言,由标准C编写而成,可被C/C++调用,也可调用C/C++的函数。
在目前的脚本引擎中,Lua的速度是最快的。。。
Lua可直接在EditPlus文本处理器上开发,只需搭建相应的开发环境即可。GO GO GO
先说说我和Lua是如何相识的吧*^-^*。。。
故事的开始是这样滴。。。在一个阳光明媚的。。。。我来。。。就在公司认识了Lua。。。
然后我们就开始了一段刻苦铭心的。。。和白首到老的XIN
为什么我要选择学Lua???很简单。。。起初是因为公司需要。。。在慢慢的接触过程中。。。
发现Lua原来是这么的耐人寻味。。。
就好比爱情,,,可以是一见钟情的 、也可以是日久生情的。。。Lua可能更适合和我细水长流了吧!!!
一见钟情是因为被外表吸引,日久生情就是对对方内心世界的阅读与欣赏了。。。
一见钟情并不一定是长久的。。。也许大概可能会随着岁月的流逝越发平淡。。。
反而日久生情却可以成就白首的一生。。。一见钟情的最终也是最好归宿就是日久生情。。。
所以。。。虽然我和Lua的开始并不是所谓的完美。。。但是我们会为了奔向完美的结局而努力滴。。。
既然都已经在一起了。。。之间的磕磕绊绊是在所难免的。。。所以如果你看出我们之间存在的问题。。。
麻烦帮我们纠正。。。为了我和Lua的天长地久在此先行谢过了。。。*^_^* *^_^* *^_^*
一、Lua中的一些特殊字符
1、单行注释 --注释内容; 多行注释 --[[ 注释内容 ]]
2、使用#来计算字符串的长度。
str = "www.baidu.com"
print(#str)
输出:13
3、..用来连接两个字符串
str1 = "hello"
str2 = "world"
print(str1 .. ' ' .. str2)
输出:hello world
4、不等号是~=而不是!=
print( ~= )
print( ~= )
程序运行输出:
---------- 新建程序 ----------
false
true 输出完成 (耗时 秒) - 正常终止
5、字符串可用单引号、双引号和[[ ]]来表示
str1 = "java"
str2 = 'lua'
str3 = "\"hello\""
str4 = [[world]]
程序运行输出:
---------- 新建程序 ----------
java
lua
"hello"
world 输出完成 (耗时 秒) - 正常终止
二、Lua字符串操作
1、gsub方法:l为被替换字符,m为要替换的字符,2为替换的次数,不写默认为全部替换
--输出:hemmo world java lua 2
print(string.gsub("hello world java lua", "l", "m", ))
2、find方法:Java为要查找的字符串,1是索引,即查找从索引1开始查起,不存在则返回nil
--输出:13 16
print(string.find("hello world java lua", "java", ))
3、reverse方法:反转字符串; upper/lower方法:大小写转换; len方法:计算字符串长度
rep方法:返回字符串的n个拷贝; format方法:格式化字符串
--输出:aul
print(string.reverse("lua")) --输出:LUA
print(string.upper("Lua")) --输出:lua
print(string.lower("Lua")) --输出:3
print(string.len("lua")) --输出:lualualua
print(string.rep("lua", )) --输出:日期格式化:2016/04/07
year = ; month = ; day =
print(string.format("日期格式化:%04d/%02d/%02d", year, month, day))
对%04d做一个补充:04代表整数不足4位左边用0补齐。
三、Lua知识点储备
1、Lua中的8中基本类型:
nil、number、boolean、string、userdata、thread、table,function
2、在默认情况下,变量总是认为是全局变量,局部变量的定义用local关键字修饰
删除一个全局变量,只需将变量赋值为nil即可。EG:a = nil
3、遍历输出1-10,Lua循环使用语法介绍
for遍历:
for i = , do
if i == then
print('is:' .. i)
else
print(i)
end
end
while遍历:
local n =
while true do
n = n +
if n > then
break
else
print(n)
end
end
repeat...until遍历
local n =
repeat
n = n +
io.write(n .. ' ')
until n >=
if...else判断语句语法
num = ; if num > then
print("> 10")
elseif num == then
print("== 10")
else
print("< 10")
end
如果不想控制每次打印都换行,可将print(n)替换为io.write(n .. ' ')
4、两变量交换值
x, y = ,
x , y = y, x
print("x=" .. x .. ' y=' .. y)
程序运行输出:x=20 y=10
5、全局变量与局部变量
在Lua中,如果没有用关键字local修饰,全都视为全局变量。
Lua是用Table(表)来管理全局变量的。把所有的全局变量都存储在一个叫'_G'的表中。。。
local num =
str = "hello lua"
print(_G.num) --访问全局变量num,因为num被定义为局部变量。所以输出为nil
print(_G.str) --访问全局变量str
程序运行输出:
---------- 新建程序 ----------
nil
hello lua 输出完成 (耗时 秒) - 正常终止
四、Lua中的table(表)用法
Lua中的table其实就是key-value键值对形式的数据结构。长的和java里的HashMap像极了。。。
初始化表:myTable = {}
--数组形式
myTable = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thurday", "Friday", "Saturday"} for index in pairs(myTable) do
io.write(myTable[index] .. ' ')
end print("第一个元素:" .. myTable[])
程序运行输出:
---------- 新建程序 ----------
Sunday Monday Tuesday Wednesday Thurday Friday Saturday 第一个元素:Sunday 输出完成 (耗时 秒) - 正常终止
Lua中的数组和table
--数组形式
myTable = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thurday", "Friday", "Saturday"}
--table形式。。。与数组形式是等价的
--myTable = {[1] = "Sunday", [2] = "Monday", [3] = "Tuesday", [4] = "Wednesday", [5] = "Thurday", [6] = "Friday", [7] = "Saturday"} for index = , #myTable do
io.write(myTable[index] .. ' ')
end
程序运行输出:
---------- 新建程序 ----------
Sunday Monday Tuesday Wednesday Thurday Friday Saturday
输出完成 (耗时 秒) - 正常终止
languges = {
first = "java",
second = "lua",
third = "struts",
fourth = "hibernate",
fifth = "spring",
"all"
} print("遍历languges:")
for k, v in pairs(languges) do
print(k .. ':' .. v)
end print('分析languges:')
print("first:" .. languges["first"])
print(languges[])
print(languges[])
print("third:" .. languges["third"])
程序执行结果:
遍历languges:
:all
fifth:spring
fourth:hibernate
first:java
third:struts
second:lua
分析languges:
first:java
all
nil
third:struts
五、table用法的延伸
courses = {
{name="java", ip="192.168.110.187"},
{name="lua", ip="10.3.255.8"},
{name="jQuery", ip="192.168.110.54"},
{name="CSS", ip="192.168.110.134"},
{name="ORACLE", ip="10.2.255.34"},
} --按照name对network进行排序
table.sort(courses, function(a, b)
return (a.name > b.name)
end) --遍历输出network的值
print "排序后courses为:"
for o in pairs(courses) do
local temp = '' --temp为局部变量
for k, v in pairs(courses[o]) do
temp = temp .. ',' .. k .. '_' .. v
end
-- print(string.sub(temp, 2, string.len(temp)))
-- print(string.sub(temp, 2, #temp)) --可以根据#temp来获取temp的长度
print(string.sub(temp, )) --下标从1开始算而非0
end
程序运行输出:
---------- 新建程序 ----------
排序后courses为:
name_lua,ip_10.3.255.
name_java,ip_192.168.110.
name_jQuery,ip_192.168.110.
name_ORACLE,ip_10.2.255.
name_CSS,ip_192.168.110. 输出完成 (耗时 秒) - 正常终止
六、Lua中的function(函数)用法
1、简单的函数语法与代码实现
function fac (n)
if n <= then
return
else
return n * fac(n-)
end
end print(fac())
2、函数作为变量的形式
maxNum = function(x, y)
if x > y then
return x
else
return y
end
end print('maxNum=' .. maxNum(, ))
程序运行输出:
---------- 新建程序 ----------
maxNum= 输出完成 (耗时 秒) - 正常终止
3、函数可有多个返回值
function maxMin(arr)
maxNum, minNum = arr[], arr[]
for index in pairs(arr) do
if arr[index] > maxNum then
maxNum = arr[index]
end if arr[index] < minNum then
minNum = arr[index]
end
end
return maxNum, minNum
end myTable = {, , , , , , , }
maxNum, minNum = maxMin(myTable) print("maxNum=" .. maxNum .. " minNum=" .. minNum)
程序运行输出:
---------- 新建程序 ----------
maxNum= minNum= 输出完成 (耗时 秒) - 正常终止
4、函数中参数的个数可以是可变的
function ave(...)
args = {...}
sum = ; for i, v in ipairs(args) do
sum = sum + v
end
return sum / #args
end print(ave(, , , , , , , )) --程序输出:32.25
5、函数实现迭代器功能
function square(iteratorMaxCount, currentNumber)
if (currentNumber < iteratorMaxCount) then
currentNumber = currentNumber +
return currentNumber, currentNumber * currentNumber
end
end for index, sqr in square,, do
print(index, sqr)
end
程序运行输出:
---------- 新建程序 ---------- 输出完成 (耗时 秒) - 正常终止
七、Lua中的pairs和ipairs的区别
subArr = {"java", "lua", "c", "c++", "jQuery"}
userInfo = {name="zhangsan", age = , sex = "man", addr = "shenzhen"} --ipairs可替换为pairs
for k,v in ipairs(subArr) do
print('k=' .. k .. ' v=' .. v .. ' ' .. subArr[k])
end print() --pairs不可替换为ipairs
for k,v in pairs(userInfo) do
print('k=' .. k .. ' v=' .. v .. ' ' .. userInfo[k])
end
程序运行输出:
---------- 新建程序 ----------
k= v=java java
k= v=lua lua
k= v=c c
k= v=c++ c++
k= v=jQuery jQuery k=age v=
k=addr v=shenzhen shenzhen
k=name v=zhangsan zhangsan
k=sex v=man man 输出完成 (耗时 秒) - 正常终止
相同程序使用pairs和ipairs输出结果的不同
local subjects = {
"java",
"lua",
[] = "c",
[] = "c++",
[] = "jQuery",
"css",
[] = "jsp"
}
for k, v in pairs(subjects) do --将pairs替换为ipairs对比输出结果
print(k, v)
end
执行结果输出:
使用pairs的输出如下
---------- 新建程序 ----------
java
lua
css
jQuery
c++
jsp 输出完成 (耗时 秒) - 正常终止
使用ipairs的输出如下:
---------- 新建程序 ----------
java
lua
css 输出完成 (耗时 秒) - 正常终止
从上面的代码执行结果可以看出:
pairs可以遍历表中的所有key,还可以返回nil;
ipairs不能返回nil,只能返回数字0,遇到nil程序直接退出。
八、Lua连接MySql数据库
require "luasql.mysql"
--mysql = require "luasql.mysql" --写法2 --创建环境对象
env = luasql.mysql()
--env = mysql.mysql() --写法2 --连接数据库
conn = env:connect("lua", "root", "******", "localhost", )
--conn = env:connect(数据库名称, 账号, 密码, IP地址, 端口号) --设置数据库的编码格式
conn:execute"SET NAMES UTF8" --执行数据库操作
cur = conn:execute([[select * from userInfo]]) --此处的a指的是以附加的方式打开只写文件
row = cur:fetch({}, "a") --文件对象的创建,顺便将表信息存储在userInfo.txt文本中
file = io.open("userInfo.txt","w+"); while row do
var = string.format("%d %s %d %s\n", row.id, row.name, row.sex, row.address) print(var) file:write(var) row = cur:fetch(row, "a")
end file:close() --关闭文件对象
conn:close() --关闭数据库连接
env:close() --关闭数据库环境
程序运行输出:
---------- 新建程序 ----------
zhangsan shenzhen lisi shanghai wangwu beijing sunfang xiamen linli fuzhou zhaoliu hangzhou 输出完成 (耗时 秒) - 正常终止
其中userInfo表结构设计如下:
用lua进行面向对象的编程,声明方法和调用方法统一用冒号,对于属性的调用全部用点号
今天就写这么多了。。。等实际项目开发中再进行补缺补漏了。。。
初次接触Lua,个人感觉即不排斥也没有很高的热情。。。也许是缺乏开发经验,,,
现在无法从实际开发项目中体会到Lua的强大吧。。。
我和Lua并非一见钟情,但我们却相信日久生情!!!
在最无能为力的时候,却遇到了最想照顾一生的那个人。。。
我和Lua并非一见钟情,我们期待着日久生情(相遇篇)的更多相关文章
- Lua代码解析-写给C和C++开发人员
lua语言作为一门轻量级脚本语言,能够非常好的被嵌入到应用程序,因此,在移动游戏开发中举足轻重 然后C/C++开发人员转lua并非非常习惯,我也是..所以,一起努力学习lua吧 lua没有类的概念,有 ...
- Lua语言模型 与 Redis应用
Lua语言模型 与 Redis应用 标签: Java与NoSQL 从 2.6版本 起, Redis 开始支持 Lua 脚本 让开发者自己扩展 Redis. 本篇博客主要介绍了 Lua 语言不一样的设计 ...
- Lua中的userdata
[话从这里说起] 在我发表<Lua中的类型与值>这篇文章时,就有读者给我留言了,说:你应该好好总结一下Lua中的function和userdata类型.现在是时候总结了.对于functio ...
- redis源码学习之lua执行原理
聊聊redis执行lua原理 从一次面试场景说起 "看你简历上写的精通redis" "额,还可以啦" "那你说说redis执行lua脚本的原理&q ...
- Linux 下 Lua 与 LuaSQL 模块安装
相关说明: Lua最近在Nginx的web服务器上挺火的, 它的高效让更多开发喜欢上它, 本文讲述Lua与LuaSQL的安装. 在上几篇mysql-proxy的安装中有提到和操作过. 操作系统: Li ...
- 《Cocos2d-x实战 Lua卷》上线了
感谢大家一直以来的支持!各大商店均开始销售:京东:http://item.jd.com/11659697.html当当:http://product.dangdang.com/23659810.htm ...
- Lua学习笔记(三):函数和闭包
函数 lua的函数以function关键字开始,后跟函数名称和参数,最后以end结束,我们看一个简单的函数定义: function foo() --do something end function ...
- C++与Lua交互(二)
上一篇我们搭建好了整个的项目环境,现在,我们一起探索一下如何将lua寄宿到C++中. 宿主的实现 我们在LuaWithCPPTest项目下,查看Source.cpp代码如下: #include < ...
- Cocos2d-x 3.1.1 Lua实例-AccelerometerTest(重力加速计)
Cocos2d-x 3.1.1 Lua实例-AccelerometerTest(重力加速计) 本篇博客介绍Cocos2d-x的第一个实例--重力加速计測试.效果图(注:这里无法模拟重力感应): --[ ...
随机推荐
- spring 依赖注入(IOC DI)
依赖注入(IOC DI) 依赖注入的两种方式: 1. set注入 Spring要求使用set注入方式的时候,Bean需要提供一个无参数的构造方法.并提供一个属性的setter方法.例如: packag ...
- 检测PC端和移动端的方法之一
window.mobileCheck = function() { var check = false; (function(a){if(/(android|bb\d+|meego).+mobile| ...
- DateTime , DateTime2 ,DateTimeOffset 之间的小区别
闲来无事列了个表比对一下这3兄弟之间还是有一点差距的╮(╯_╰)╭ DateTime DateTime2 DateTimeOffset 日期范围 1753-01-01到 9999-12-31 00 ...
- oracle DB_LINK
1.先创建远程数据库服务名(注意,如果服务器既有oracle服务端又有客户端,需要在服务端的tnsnames.ora中配置服务名,否则会报如下错误): SQL> select count(*) ...
- JVM探索之——内存管理(一)
本系列的第一篇文章,预计本系列最后面会有两三个案例. Java与C.C++不一样Java不需要Coder进行手动内存管理,而这一切都交给JVM进行自动内存管理,这从某种程度上来说也减轻了我们Coder ...
- my_mosaic
//功能:输入想要打马赛克的坐标点,宽,高以及每个边需要划分的块数进行打马赛克 //只能处理位图,根据不同色深定义depth即可 //还没写从文件头读取图片分辨率 #include<unistd ...
- 学习OpenStack之(5):在Mac上部署Juno版本OpenStack 四节点环境
0. 前沿 经过一段时间的折腾,终于在自己的Mac上装好了Juno版本的四节点环境.这过程中,花了大量的时间,碰到了许多问题,学到不少知识,折腾过不少其实不需要折腾的东西,本文试着来对这过程做个总结. ...
- (六)责任链模式-C++实现
使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这些对象连成一条链,并沿着这条链传递请求,直到有一个对象处理它为止. 责任链模式是使用多个对象处理用户请求的成熟模式,它的关键 ...
- [No000020]背单词提不起兴趣怎么办?
- 比较全的JavaScript倒计时脚本[xyytit]
需要做一个功能,给特定的活动或者商品添加一个倒计时提示,在网上找了好些方法,总结了比较好的一些方法,以备后用: 1. 比较长时间的倒计时(如:距离2014年还有0年, 0月, 30天, 9小时, 41 ...