那时候刚好下着雨,柏油路面湿冷冷的,还闪烁着青、黄、红颜色的灯火。



Lua基础学习方式 (一天学会)


Lua基础学习方式 (一天学会)

Lua是一种轻量语言,它的官方版本只包括一个精简的核心和最基本的库。这使得Lua体积小、启动速度快。它用ANSI C语言编写并以源代码形式开放,编译后仅仅一百余K,可以很方便的嵌入别的程序里。和许多“大而全”的语言不一样,网路通讯、图形界面等都没有默认提供。但是Lua可以很容易地被扩展:由宿主语言(通常是C或C++)提供这些功能,Lua可以使用它们,就像是本来就内置的功能一样。事实上,现在已经有很多成熟的扩展模块可供选用。(来自wikipedia)

一天学会只是对于有基础的同学来说,它是一门非常轻量级的语言。不管你信不信,反正我就是一天学完基础了。

网上也有非常多的教程,大家可以根据自己的喜好去选择学习网站

只简单讲讲方法,其他的得靠自己啊...

关于我了解到的Lua

我也是前几年对知道有这门语言的。最初只知道它是用来开发游戏插件的,比如《魔兽世界》很多插件就是用lua语言写的。

再次了解Lua的时候是在老罗开锤2发布会时候,当时它门票捐赠给了OpenResty开源组织。似乎后来OpenResty就火了,然后我也准备开始用Lua+Nginx做一些东西了。

Lua+Nginx可以做很多的事情,比如数据过滤,数据验证,访问控制等等。

Lua 安装

Ubuntu系统自带lua语言,如果没有或使用的是其他Linux系列系统可以参考官网的安装方式。

安装方式也非常简单:

curl -R -O http://www.lua.org/ftp/lua-5.3.3.tar.gz
tar zxf lua-5.3.3.tar.gz
cd lua-5.3.3
make linux test

安装完后执行$ lua命令进入控制台看看。

创建一个lua文件hello.lua并保存

#!/usr/bin/lua

print("Hello Lua!");

然后执行命令$ lua hello.lua如果没报错的话应该会输出 "Hello Lua!"

安装phpstorm Lua插件

phpStorm是一款非常强大的开发工具,实在是太强大了我这就不一一介绍了,以前写过一篇关于phpStorm的正确使用方式。

《如何优雅的使用 phpStorm》

PhpStorm可以让代码高亮,这点很重要,这么小门的语言都给做了代码高亮,真是太棒了

请大家购买正版

安装方式

  1. 快捷键command + ,打开配制
  2. 在左侧的先项中找到Plugins
  3. 然后在搜索栏中输入lua (应该会搜索到两个,一个是Lua 一个是OpenResty Lua Support)
  4. 选择相应用的,然后安装就行了
  5. 重启PhpStorm

重启完后在phpStorm的右侧会出现一个Lua的选项卡

选择它就可以在phpstorm下运行Lua脚本了。

安装了OpenResty Lua Support插件当写Lua for Nginx 相关的脚本,将会有一小点的编码提示,是不是很6 (^ν^)

Lua 语法

与大多数语言一样,我这也就不贴了,请参考

Lua 基本语法

Lua 数据类型

这个我就不多讲解了,既然有语言基础,那么语法都差不多。

主要基本类型:nil、boolean、number、string、userdata、function、thread和table。

类型 描述
nil null 类型
boolean 布尔型true跟false
number 双精度类型的实浮点数
string 字符串由一对双引号或单引号来表示
function 函数
userdata 表示任意存储在变量中的C数据结构
thread 表示执行的独立线路,用于执行协同程序
table Lua 中的表(table)其实是一个"关联数组"(associative arrays),数组的索引可以是数字或者是字符串。在 Lua 里,table 的创建是通过"构造表达式"来完成,最简单构造表达式是{},用来创建一个空表。

关键字type查看类型

print(type(a))

数据类型中文文档参考: Lua 数据类型

其他语法

由于很多都是重复的所以我就不贴代码及教程啦,我只说方法

《Lua教程》

把上面贴的教程里的所有类型及语法都挨个试一遍。

不明白的多试几遍,语言就那点东西,只要有逻辑掌握了基本语法大多数语言都能写。

这是当时我学习的时候把所有的类型都挨个敲了一遍,并且试着改改教程里说的,或去实现点东西。

协同处理

协同处理这个应该算是比较绕,与其他语言的迭代器很像,这里可能得花比较长的时间去了解。

比如:

#!/usr/bin/lua
function foo(a)
    print("foo function", a)
    return coroutine.yield(2 * a)
end

co = coroutine.create(function(a, b)
    print("第一次协同执行输出: ", a, b)
    local r = foo(a + 1)

    print("第二个协同扫行办出: ", r)
    local r, s = coroutine.yield(a + b, a - b)

    print("第三个协执行输出: ", r, s)
    return b, "结束协同程序"
end)

print("main", coroutine.resume(co, 1, 10))
print("--分割线----")
print("main", coroutine.resume(co, 'r'))
print("--分割线----")
print("main", coroutine.resume(co, 'x', 'y'))
print("--分割线----")
print("main", coroutine.resume(co, "x", "y"))
print("--分割线----") 

运行上面的程序试试看。

尾巴

大概就说这么多吧。

一是太懒了,二是因为似乎有好长时间没有更新文章了。

学习是一件非常痛苦的事情, 我们学习一起坚持

学完Lua基础知识下篇主要写OpenResty的实际应用吧

大家加油!