`
CshBBrain
  • 浏览: 638651 次
  • 性别: Icon_minigender_1
  • 来自: 成都
博客专栏
B7d9bf34-126e-301f-819e-81f2615b5a2a
开源WebSocket服务...
浏览量:142237
Group-logo
HTML5移动开发
浏览量:135608
社区版块
存档分类
最新评论

lua简介

 
阅读更多

转自:http://www.iteye.com/topic/451404

lua是一个很有意思的编程语言,我是用它写base64编码辅助工具时候发现的。 

lua是巴西里约热内卢大学的一个研究项目,最新版本5.1,真正变成一个人人皆知的编程语言还是因为魔兽世界这个网络游戏。因为暴雪选择了lua作为插件语言,一时间变得众人皆知。现在国内也有不少网络游戏使用lua作为脚本语言。 

lua的特点一个是小,整个vm,编译器以及第三方库加起来可能也不过就几兆,vm可以单独运行,大概也就需要100k左右内存,非常适合嵌入式设备或者掌上设备使用,比如psp就有一个lua player,而google的gphone最新版操作系统也内置了lua的脚本支持。现在几乎所有的流行操作系统都可以运行lua,这要归功于lua使用了标准的ansi c实现。 

lua可以用来编写小的utility,比如十几二十行就能完成的,我选择lua作为学习对象的原因一个是它代码量小而且极为精致,另外实用性也很强,通过luainterface,luacom,luasocket这些类库,可以完成大多数常见任务。 

lua的网站是www.lua.org,可以下载最新的版本lua-5.1.4.tar.gz,源代码不过才200k,所以我选择用它来学习如何构建一个工业级的c程序。另外比较有用的lua网站一个是www.lua-users.org,另外还有一个是lua开源项目集合luaforge.net,可以下载到大量有用的projects。 

如果是windows用户,可以到luaforwindows.luaforge.net下载Lua for windows,这是一个大概15M左右的安装文件,包含了大量实用的lua第三方库,另外还有一个可以调试运行的编辑器。 

我第一个使用lua的例子是读进一个目录文件,然后处理。 

这个文件是这样生成的,在命令行下输入 dir *.txt > aaa.txt 

这样生成了一个aaa.txt,问题是我只想要文件名不需要大小等其他信息,文件名长度也是固定的20个字符(包括扩展名),所以采用下面的脚本处理这个aaa.txt。 

filename = [[C:\aaa.txt]] 
filename_b = [[C:\bbb.txt]] 
local f = assert(io.open(filename)) 
local f_w = assert(io.open(filename_b, ‘w’)) 

while true do 
local buffer = f:read(”*l”) 

if not buffer then 
break 
end 

print(buffer) 

if string.len(buffer) > 20 then 
newBuffer = string.sub (buffer, string.len(buffer) – 20 +1) 
print(newBuffer) 
f_w:write(newBuffer) 
f_w:write(’\n’) 
end 

end 

f:close() 
f_w:close() 

其中的io以及string都是lua内置的模块。简单快速,而且功能不亚于python、ruby这样的脚本语言。 

lua尽管没有面向对象的类、继承、多态等概念,它的table、function、metatable、userdata一样可以完成非常炫目的功能。 

另外可以通过c或者c++语言编写第三方模块,让lua调用完成特定任务。 

写一个c++实现的lua扩展并不难,但是需要了解lua堆栈处理的知识,而且还有可能需要处理GC方面的问题,这都是比较高级的话题。但是基本步骤大体如下: 

1,include lua的头文件,因为lua代码是c语言实现,所以需要使用extern “C” 

extern “C” 

#include <lua.h> 
#include <lauxlib.h> 


2,声明一个结构,类似 

static const struct luaL_reg mfcluatest [] = 

{”test”, l_test}, 
{”average”, l_average}, 
{NULL, NULL}  /* sentinel */ 
}; 

其中test以及average都是lua可以调用的名字,l_test和l_average都是静态函数。 

static int average(lua_State *L){…} 

其中我还没有搞懂的地方是函数具体该如何编写。 

3,声明一个函数如下luaopen_xxx,注意需要声明为dllexport和使用extern “C”,另外注意mfcluadll这个名字,另外要注意的是我们前面定义的mfcluatest结构。 

extern “C” __declspec(dllexport) int luaopen_mfcluadll(lua_State *l) 

luaL_openlib(l, “mfcluadll”, mfcluatest, 0); 
return 1; 


4,项目设置需要加入lua的include和lib,以及lua51.lib,然后编译就ok了。 

5,最后把编译好的文件放到lua目录下的clibs里面,使用这样的代码测试一下: 

require(”mfcluadll”) 
avg, sum = mfcluadll.average(10, 20, 30, 40, 50) 
print(”The average is “, avg) 
print(”The sum is “, sum) 

大功告成! 

mfcluadll.rar 

这是我编译的lsqlite3, http://luaforge.net/projects/luasqlite/,其中已经内嵌了sqlite3的代码,只要用vc2008编译就可以直接运行使用了。需要注意的是模块名字是sqlitelua。 

require(”sqlitelua”) 
local db = sqlitelua.open_memory() 

db:exec[[ 
CREATE TABLE testlua (id INTEGER PRIMARY KEY, content); 
INSERT INTO testlua VALUES (NULL, 'Hello World !'); 
INSERT INTO testlua VALUES (NULL, 'Hello Lua !'); 
INSERT INTO testlua VALUES (NULL, 'Hello Sqlite3 !') 
]] 

for row in db:nrows(”SELECT * FROM testlua”) do 
print(row.id, row.content) 
end 

分享到:
评论
1 楼 fanfq 2012-09-27  
yy了一下,撸啊!

相关推荐

    剑网3的lua事件列表以及中文简介

    剑网3的lua事件列表以及中文简介,例如: SYS_MSG 系统信息触发,例如玩家死亡、升级、系统错误信息、命中、躲闪等 NPC_TALK NPC说话时触发

    LuaQuickStartGuide:Lua快速入门指南的源代码-lua source code

    第1章:Lua简介 本章介绍什么是Lua以及如何在任何操作系统上设置Lua环境。 Lua不受任何操作系统限制,本章介绍如何为Windows,macOS和Linux安装Lua。 第2章:与Lua合作 在本章中,您将学习Lua编程的基础知识。 诸如...

    LUA脚本简介 对于有语言基础的学习有帮助

    LUA脚本简介 只是基础,一些简单的语法和数据结构

    Lua 5.3中文手册

    lua 5.3的中文参考手册,包括对于lua的简介、语法、标准库、辅助库的介绍。

    lua使用简介

    lua学习的基础随笔,建议在w3c上看,我只是为了分。lua学习的基础随笔,建议在w3c上看,我只是为了分lua学习的基础随笔,建议在w3c上看,我只是为了分

    剑网3的lua事件列表

    剑网3的lua事件列表以及中文简介,例如: SYS_MSG 系统信息触发,例如玩家死亡、升级、系统错误信息、命中、躲闪等 NPC_TALK NPC说话时触发

    Beginning Lua Programming

    简介 Lua offers a wide range of features that you can use to support and enhance your applications. With this book as your guide, you’ll gain a thorough understanding of all aspects of programming ...

    lua解释器 小巧、方便

    PSP lua编辑器 LUAPROG 1.0 软件简介: LUAPROG是psp上一个小巧的LUA编辑软件该软件支持LUA语法高亮 支持LUA脚本的

    lua 脚本语言教程

    简介 Lua 语言基础 Lua 高级特性 ——面向对象 ——c api 我假设大家都学过至少一门编程语言,比如Basic或C,特别是C。因为Lua的最大用途是在宿主程序中作为脚本使用的。Lua 的语法比较简单,学习起来也比较省力,...

    Lua脚本语言简明教程 ppt

    简介lua脚本语言,是一本不错的脚本语言,它详细介绍了你所需要的内容。

    基于Lua的upstream管理和健康检查模块Lua-Resty-Checkups.zip

    特点:支持周期性upstream服务管理操作支持管理和健康检查支持upstream动态更新有利于加权轮询或哈希平衡支持 Nginx C upstream同步操作可使用级别和键值实现集群使用简介:-- config.lua _M = {} _M.global ...

    Lua程序设计(第2版) 高清版

    Lua开发教程,包含基本语法的讲解及大量实战简介,适合初级开发人员学习,并可作为高级开发人员参考

    XLua框架设计文档1

    XLua框架设计文档目录一.总体设计 41.1 概述 41.2 工程目录 41.3 游戏启动流程 91.4 运行指导 9二.Lua简介 152.1 lua设计语

    lua_example:lua 面向对象的例子

    简介 背景介绍 Lua作为目前最为流行的、免费轻量级嵌入式脚本语言,在很多工业级的应用程序中被广泛应用,如Adobe's Photoshop,甚至是在一些著名的游戏程序中也被大量使用,如星际。不仅如此,由于Lua具备很多特殊...

    Lua 5.3 手册中文版.rar

    云风翻译的Lua 5.3 手册中文版,包括对于lua的简介、语法、标准库、辅助库的介绍。对于英文不好,又想学习了解和日常使用lua的同学,非常实用!

    Lua教程(十七):C API简介

    主要介绍了Lua教程(十七):C API简介,本文讲解了基础知识、栈、C API中的错误处理、Lua调用C程序、C程序调用Lua代码的错误处理等内容,需要的朋友可以参考下

    简介Lua脚本与Redis数据库的结合使用

     这个入门教程会让你学会在你的Redis 服务器上使用强大的lua语言。 Hello, Lua! 我们的第一个Redis Lua 脚本仅仅返回一个字符串,而不会去与redis 以任何有意义的方式交互。 代码如下:local msg = “Hello, world!...

    lua-resty-shell, 用于OpenResty应用服务器的微型子进程/shell 库.zip

    lua-resty-shell, 用于OpenResty应用服务器的微型子进程/shell 库 简介当你需要执行子进程( 或者 shell 命令) 时,这个小型库是用于与OpenResty应用程序一起使用的。 除了 non completely完全不阻塞外,即使是完全不...

Global site tag (gtag.js) - Google Analytics