Lua作为一款轻量级的脚本语言,由标准C编写而成,可被C/C++调用,也可调用C/C++的函数。

在目前的脚本引擎中,Lua的速度是最快的。。。

  Lua可直接在EditPlus文本处理器上开发,只需搭建相应的开发环境即可。GO GO GO

  先说说我和Lua是如何相识的吧*^-^*。。。

  故事的开始是这样滴。。。在一个阳光明媚的。。。。我来。。。就在公司认识了Lua。。。

然后我们就开始了一段刻苦铭心的。。。和白首到老的XIN

  为什么我要选择学Lua???很简单。。。起初是因为公司需要。。。在慢慢的接触过程中。。。

发现Lua原来是这么的耐人寻味。。。

就好比爱情,,,可以是一见钟情的 、也可以是日久生情的。。。Lua可能更适合和我细水长流了吧!!!

  一见钟情是因为被外表吸引,日久生情就是对对方内心世界的阅读与欣赏了。。。

  一见钟情并不一定是长久的。。。也许大概可能会随着岁月的流逝越发平淡。。。

反而日久生情却可以成就白首的一生。。。一见钟情的最终也是最好归宿就是日久生情。。。

所以。。。虽然我和Lua的开始并不是所谓的完美。。。但是我们会为了奔向完美的结局而努力滴。。。

  既然都已经在一起了。。。之间的磕磕绊绊是在所难免的。。。所以如果你看出我们之间存在的问题。。。

麻烦帮我们纠正。。。为了我和Lua的天长地久在此先行谢过了。。。*^_^* *^_^* *^_^*

一、Lua中的一些特殊字符

  1、单行注释  --注释内容; 多行注释  --[[ 注释内容 ]]

  2、使用#来计算字符串的长度。

  1.     str = "www.baidu.com"
  2.     print(#str)

    输出:13

  3、..用来连接两个字符串 

  1.     str1 = "hello"
  2.     str2 = "world"
  3.     print(str1 .. ' ' .. str2)

      输出:hello world

  4、不等号是~=而不是!=

  1.     print( ~= )
  2.     print( ~= )

    程序运行输出:

  1. ---------- 新建程序 ----------
  2. false
  3. true
  4.  
  5. 输出完成 (耗时 秒) - 正常终止

  5、字符串可用单引号、双引号和[[ ]]来表示

  1.     str1 = "java"
  2.     str2 = 'lua'
  3.     str3 = "\"hello\""
  4.     str4 = [[world]]

    程序运行输出:

  1. ---------- 新建程序 ----------
  2. java
  3. lua
  4. "hello"
  5. world
  6.  
  7. 输出完成 (耗时 秒) - 正常终止

二、Lua字符串操作

   1、gsub方法:l为被替换字符,m为要替换的字符,2为替换的次数,不写默认为全部替换

  1.     --输出:hemmo world java lua 2
  2.     print(string.gsub("hello world java lua", "l", "m", ))

  2、find方法:Java为要查找的字符串,1是索引,即查找从索引1开始查起,不存在则返回nil

  1.     --输出:13 16
  2.     print(string.find("hello world java lua", "java", ))

  3、reverse方法:反转字符串; upper/lower方法:大小写转换; len方法:计算字符串长度

    rep方法:返回字符串的n个拷贝; format方法:格式化字符串

  1.     --输出:aul
  2.     print(string.reverse("lua"))
  3.  
  4.     --输出:LUA
  5.     print(string.upper("Lua"))
  6.  
  7.     --输出:lua
  8.     print(string.lower("Lua"))
  9.  
  10.     --输出:3
  11.     print(string.len("lua"))
  12.  
  13.     --输出:lualualua
  14.     print(string.rep("lua", ))
  15.  
  16.     --输出:日期格式化:2016/04/07
  17.     year = ; month = ; day =
  18.     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遍历:

  1.     for i = , do
  2.     if i == then
  3.       print('is:' .. i)
  4.     else
  5.       print(i)
  6.     end
  7.     end

    while遍历:

  1.     local n =
  2.     while true do
  3.      n = n +
  4.     if n > then
  5.       break
  6.     else
  7.       print(n)
  8.     end
  9.     end

    repeat...until遍历

  1.     local n =
  2.     repeat
  3.      n = n +
  4.      io.write(n .. ' ')
  5.     until n >=

    if...else判断语句语法

  1.     num = ;
  2.  
  3.     if num > then
  4.      print("> 10")
  5.     elseif num == then
  6.      print("== 10")
  7.     else
  8.      print("< 10")
  9.     end

  如果不想控制每次打印都换行,可将print(n)替换为io.write(n .. ' ')

  4、两变量交换值

  1.     x, y = ,
  2.     x , y = y, x
  3.     print("x=" .. x .. ' y=' .. y)

    程序运行输出:x=20 y=10

  5、全局变量与局部变量

    在Lua中,如果没有用关键字local修饰,全都视为全局变量。

    Lua是用Table(表)来管理全局变量的。把所有的全局变量都存储在一个叫'_G'的表中。。。

  1.     local num =
  2.     str = "hello lua"
  3.     print(_G.num) --访问全局变量num,因为num被定义为局部变量。所以输出为nil
  4.     print(_G.str) --访问全局变量str

    程序运行输出:

  1. ---------- 新建程序 ----------
  2. nil
  3. hello lua
  4.  
  5. 输出完成 (耗时 秒) - 正常终止

四、Lua中的table(表)用法

  Lua中的table其实就是key-value键值对形式的数据结构。长的和java里的HashMap像极了。。。

  初始化表:myTable = {}

  1.   --数组形式  
      myTable = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thurday", "Friday", "Saturday"}
  2.  
  3.   for index in pairs(myTable) do
  4.    io.write(myTable[index] .. ' ')
  5.   end
  6.  
  7.   print("第一个元素:" .. myTable[])

  程序运行输出:

  1. ---------- 新建程序 ----------
  2. Sunday Monday Tuesday Wednesday Thurday Friday Saturday 第一个元素:Sunday
  3.  
  4. 输出完成 (耗时 秒) - 正常终止

  

  Lua中的数组和table

  1.   --数组形式
  2.   myTable = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thurday", "Friday", "Saturday"}
  3.   --table形式。。。与数组形式是等价的
  4.   --myTable = {[1] = "Sunday", [2] = "Monday", [3] = "Tuesday", [4] = "Wednesday", [5] = "Thurday", [6] = "Friday", [7] = "Saturday"}
  5.  
  6.   for index = , #myTable do
  7.    io.write(myTable[index] .. ' ')
  8.   end

    程序运行输出:

  1. ---------- 新建程序 ----------
  2. Sunday Monday Tuesday Wednesday Thurday Friday Saturday
  3. 输出完成 (耗时 秒) - 正常终止
  1. languges = {
  2. first = "java",
  3. second = "lua",
  4. third = "struts",
  5. fourth = "hibernate",
  6. fifth = "spring",
  7. "all"
  8. }
  9.  
  10. print("遍历languges:")
  11. for k, v in pairs(languges) do
  12. print(k .. ':' .. v)
  13. end
  14.  
  15. print('分析languges:')
  16. print("first:" .. languges["first"])
  17. print(languges[])
  18. print(languges[])
  19. print("third:" .. languges["third"])

  程序执行结果:

  1. 遍历languges
  2. :all
  3. fifth:spring
  4. fourth:hibernate
  5. first:java
  6. third:struts
  7. second:lua
  8. 分析languges
  9. first:java
  10. all
  11. nil
  12. third:struts

五、table用法的延伸

  1. courses = {
  2. {name="java", ip="192.168.110.187"},
  3. {name="lua", ip="10.3.255.8"},
  4. {name="jQuery", ip="192.168.110.54"},
  5. {name="CSS", ip="192.168.110.134"},
  6. {name="ORACLE", ip="10.2.255.34"},
  7. }
  8.  
  9. --按照namenetwork进行排序
  10. table.sort(courses, function(a, b)
  11. return (a.name > b.name)
  12. end)
  13.  
  14. --遍历输出network的值
  15. print "排序后courses为:"
  16. for o in pairs(courses) do
  17. local temp = '' --temp为局部变量
  18. for k, v in pairs(courses[o]) do
  19. temp = temp .. ',' .. k .. '_' .. v
  20. end
  21. -- print(string.sub(temp, 2, string.len(temp)))
    -- print(string.sub(temp, 2, #temp)) --可以根据#temp来获取temp的长度
  22. print(string.sub(temp, )) --下标从1开始算而非0
  23. end

  程序运行输出:

  1. ---------- 新建程序 ----------
  2. 排序后courses为:
  3. name_lua,ip_10.3.255.
  4. name_java,ip_192.168.110.
  5. name_jQuery,ip_192.168.110.
  6. name_ORACLE,ip_10.2.255.
  7. name_CSS,ip_192.168.110.
  8.  
  9. 输出完成 (耗时 秒) - 正常终止

六、Lua中的function(函数)用法

  1、简单的函数语法与代码实现

  1.   function fac (n)
  2.   if n <= then
  3.      return
  4.    else
  5.     return n * fac(n-)
  6.   end
  7.   end
  8.  
  9.   print(fac())

  

  2、函数作为变量的形式

  1.   maxNum = function(x, y)
  2.    if x > y then
  3.      return x
  4.    else
  5.     return y
  6.    end
  7.   end
  8.  
  9.   print('maxNum=' .. maxNum(, ))

  程序运行输出:

  1. ---------- 新建程序 ----------
  2. maxNum=
  3.  
  4. 输出完成 (耗时 秒) - 正常终止

  3、函数可有多个返回值

  1.   function maxMin(arr)
  2.    maxNum, minNum = arr[], arr[]
  3.    for index in pairs(arr) do
  4.      if arr[index] > maxNum then
  5.       maxNum = arr[index]
  6.      end
  7.  
  8.      if arr[index] < minNum then
  9.      minNum = arr[index]
  10.      end
  11.    end
  12.   return maxNum, minNum
  13.   end
  14.  
  15.   myTable = {, , , , , , , }
  16.   maxNum, minNum = maxMin(myTable)
  17.  
  18.   print("maxNum=" .. maxNum .. " minNum=" .. minNum)

  程序运行输出:

  1. ---------- 新建程序 ----------
  2. maxNum= minNum=
  3.  
  4. 输出完成 (耗时 秒) - 正常终止

  

  4、函数中参数的个数可以是可变的

  1.   function ave(...)
  2.    args = {...}
  3.    sum = ;
  4.  
  5.    for i, v in ipairs(args) do
  6.      sum = sum + v
  7.   end
  8.    return sum / #args
  9.   end
  10.  
  11.   print(ave(, , , , , , , ))  --程序输出:32.25

  5、函数实现迭代器功能

  1.   function square(iteratorMaxCount, currentNumber)
  2.   if (currentNumber < iteratorMaxCount) then
  3.     currentNumber = currentNumber +
  4.     return currentNumber, currentNumber * currentNumber
  5.   end
  6.   end
  7.  
  8.   for index, sqr in square,, do
  9.    print(index, sqr)
  10.   end

  程序运行输出:

  1. ---------- 新建程序 ----------
  2.  
  3. 输出完成 (耗时 秒) - 正常终止

七、Lua中的pairs和ipairs的区别

  

  1.     subArr = {"java", "lua", "c", "c++", "jQuery"}
  2.     userInfo = {name="zhangsan", age = , sex = "man", addr = "shenzhen"}
  3.  
  4.     --ipairs可替换为pairs
  5.     for k,v in ipairs(subArr) do
  6.      print('k=' .. k .. ' v=' .. v .. ' ' .. subArr[k])
  7.     end
  8.  
  9.     print()
  10.  
  11.     --pairs不可替换为ipairs
  12.     for k,v in pairs(userInfo) do
  13.      print('k=' .. k .. ' v=' .. v .. ' ' .. userInfo[k])
  14.     end

    程序运行输出:

  1. ---------- 新建程序 ----------
  2. k= v=java java
  3. k= v=lua lua
  4. k= v=c c
  5. k= v=c++ c++
  6. k= v=jQuery jQuery
  7.  
  8. k=age v=
  9. k=addr v=shenzhen shenzhen
  10. k=name v=zhangsan zhangsan
  11. k=sex v=man man
  12.  
  13. 输出完成 (耗时 秒) - 正常终止

  相同程序使用pairs和ipairs输出结果的不同

  1. local subjects = {
  2. "java",
  3. "lua",
  4. [] = "c",
  5. [] = "c++",
  6. [] = "jQuery",
  7. "css",
  8. [] = "jsp"
  9. }
  10. for k, v in pairs(subjects) do --将pairs替换为ipairs对比输出结果
  11. print(k, v)
  12. end

  执行结果输出:

    使用pairs的输出如下

  1. ---------- 新建程序 ----------
  2. java
  3. lua
  4. css
  5. jQuery
  6. c++
  7. jsp
  8.  
  9. 输出完成 (耗时 秒) - 正常终止

    使用ipairs的输出如下:

  1. ---------- 新建程序 ----------
  2. java
  3. lua
  4. css
  5.  
  6. 输出完成 (耗时 秒) - 正常终止

从上面的代码执行结果可以看出:

  pairs可以遍历表中的所有key,还可以返回nil;

  ipairs不能返回nil,只能返回数字0,遇到nil程序直接退出。

八、Lua连接MySql数据库

  1. require "luasql.mysql"
  2. --mysql = require "luasql.mysql" --写法2
  3.  
  4. --创建环境对象
  5. env = luasql.mysql()
  6. --env = mysql.mysql() --写法2
  7.  
  8. --连接数据库
  9. conn = env:connect("lua", "root", "******", "localhost", )
  10. --conn = env:connect(数据库名称, 账号, 密码, IP地址, 端口号)
  11.  
  12. --设置数据库的编码格式
  13. conn:execute"SET NAMES UTF8"
  14.  
  15. --执行数据库操作
  16. cur = conn:execute([[select * from userInfo]])
  17.  
  18. --此处的a指的是以附加的方式打开只写文件
  19. row = cur:fetch({}, "a")
  20.  
  21. --文件对象的创建,顺便将表信息存储在userInfo.txt文本中
  22. file = io.open("userInfo.txt","w+");
  23.  
  24. while row do
  25. var = string.format("%d %s %d %s\n", row.id, row.name, row.sex, row.address)
  26.  
  27. print(var)
  28.  
  29. file:write(var)
  30.  
  31. row = cur:fetch(row, "a")
  32. end
  33.  
  34. file:close() --关闭文件对象
  35. conn:close() --关闭数据库连接
  36. env:close() --关闭数据库环境

  程序运行输出:

  1. ---------- 新建程序 ----------
  2. zhangsan shenzhen
  3.  
  4. lisi shanghai
  5.  
  6. wangwu beijing
  7.  
  8. sunfang xiamen
  9.  
  10. linli fuzhou
  11.  
  12. zhaoliu hangzhou
  13.  
  14. 输出完成 (耗时 秒) - 正常终止

  其中userInfo表结构设计如下:

  

   用lua进行面向对象的编程,声明方法和调用方法统一用冒号,对于属性的调用全部用点号

  今天就写这么多了。。。等实际项目开发中再进行补缺补漏了。。。

初次接触Lua,个人感觉即不排斥也没有很高的热情。。。也许是缺乏开发经验,,,

现在无法从实际开发项目中体会到Lua的强大吧。。。

  我和Lua并非一见钟情,但我们却相信日久生情!!!

   在最无能为力的时候,却遇到了最想照顾一生的那个人。。。

我和Lua并非一见钟情,我们期待着日久生情(相遇篇)的更多相关文章

  1. Lua代码解析-写给C和C++开发人员

    lua语言作为一门轻量级脚本语言,能够非常好的被嵌入到应用程序,因此,在移动游戏开发中举足轻重 然后C/C++开发人员转lua并非非常习惯,我也是..所以,一起努力学习lua吧 lua没有类的概念,有 ...

  2. Lua语言模型 与 Redis应用

    Lua语言模型 与 Redis应用 标签: Java与NoSQL 从 2.6版本 起, Redis 开始支持 Lua 脚本 让开发者自己扩展 Redis. 本篇博客主要介绍了 Lua 语言不一样的设计 ...

  3. Lua中的userdata

    [话从这里说起] 在我发表<Lua中的类型与值>这篇文章时,就有读者给我留言了,说:你应该好好总结一下Lua中的function和userdata类型.现在是时候总结了.对于functio ...

  4. redis源码学习之lua执行原理

    聊聊redis执行lua原理 从一次面试场景说起   "看你简历上写的精通redis" "额,还可以啦" "那你说说redis执行lua脚本的原理&q ...

  5. Linux 下 Lua 与 LuaSQL 模块安装

    相关说明: Lua最近在Nginx的web服务器上挺火的, 它的高效让更多开发喜欢上它, 本文讲述Lua与LuaSQL的安装. 在上几篇mysql-proxy的安装中有提到和操作过. 操作系统: Li ...

  6. 《Cocos2d-x实战 Lua卷》上线了

    感谢大家一直以来的支持!各大商店均开始销售:京东:http://item.jd.com/11659697.html当当:http://product.dangdang.com/23659810.htm ...

  7. Lua学习笔记(三):函数和闭包

    函数 lua的函数以function关键字开始,后跟函数名称和参数,最后以end结束,我们看一个简单的函数定义: function foo() --do something end function ...

  8. C++与Lua交互(二)

    上一篇我们搭建好了整个的项目环境,现在,我们一起探索一下如何将lua寄宿到C++中. 宿主的实现 我们在LuaWithCPPTest项目下,查看Source.cpp代码如下: #include < ...

  9. Cocos2d-x 3.1.1 Lua实例-AccelerometerTest(重力加速计)

    Cocos2d-x 3.1.1 Lua实例-AccelerometerTest(重力加速计) 本篇博客介绍Cocos2d-x的第一个实例--重力加速计測试.效果图(注:这里无法模拟重力感应): --[ ...

随机推荐

  1. ORACLE数据库异步IO介绍

    异步IO概念 Linux 异步 I/O (AIO)是 Linux 内核中提供的一个增强的功能.它是Linux 2.6 版本内核的一个标准特性,当然我们在2.4 版本内核的补丁中也可以找到它.AIO 背 ...

  2. Linux 性能优化工具 perf top

    1. perf perf 是一个调查 Linux 中各种性能问题的有力工具. NAME perf - Performance analysis tools for Linux SYNOPSIS per ...

  3. make

    make会自动搜索当前目录下的makefile或Makefile文件进行编译,也可以通过-f选项读取其他文件. make [-abvijm etc] -C dir表示到dir指定的路径去搜索文件 -f ...

  4. android 布局下划线

    <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_cont ...

  5. MAC OSX通过Terminal命令行控制蓝牙状态开关

    defaults write /Library/Preferences/com.apple.Bluetooth.plist ControllerPowerState 0 #关闭蓝牙服务 default ...

  6. HowTo: Linux Server Change OR Setup The Timezone

    Method 1 #tzselect # select timezone e.g. Asia/Shanghai#echo 'Asia/Shanghai' > /etc/timezone # se ...

  7. web报表工具FineReport常用函数的用法总结(报表函数)

    说明:本次总结中,凡是以tableName或viewName作为参数因子的.函数在调用的时候均按照先从私有数据源中查找,然后再从公有数据源中查找的顺序. CLASS CLASS(object):返回o ...

  8. KVM 介绍(3):I/O 全虚拟化和准虚拟化 [KVM I/O QEMU Full-Virtualizaiton Para-virtualization]

    学习 KVM 的系列文章: (1)介绍和安装 (2)CPU 和 内存虚拟化 (3)I/O QEMU 全虚拟化和准虚拟化(Para-virtulizaiton) (4)I/O PCI/PCIe设备直接分 ...

  9. html5新增及废除属性

    html5中,在新增加和废除很多元素的同时,也增加和废除了很多属性. 一.新增属性 1.表单属性 a.autofocus 对input[所有类型].select.textarea与button指定au ...

  10. 《2016ThoughtWorks技术雷达峰会----微服务架构》

    微服务架构   王键,ThoughtWorks, 首席咨询师 首先微服务架构的定义,thoughtWorks在2012年3月的技术雷达中这样定义: “微服务架构是一种架构,它提倡将单一应用程序划分为一 ...