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

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了一下,撸啊!

相关推荐

    lua与Android交互,基本实现

    一、Lua简介 Lua是一种开放源代码的脚本语言,设计目标是简洁、快速、可嵌入。它的语法简洁明了,易于阅读和编写,适合嵌入到其他系统中作为扩展语言。Lua具备动态类型、垃圾回收机制、只支持单线程等特点,使其成为...

    Lua 编程指南-Lua 编程入门教程

    #### 一、Lua简介及特点 Lua是一种轻量级的、高效的脚本语言,常被用作C语言的功能扩展。它具有以下特点: - **简洁优雅**:Lua的设计理念是简洁和优雅,这使得它的语法非常直观且易于学习。 - **轻量级**:Lua的...

    Programming in Lua Fourth edition

    1. **Lua简介**:Lua是一种轻量级、解释型的脚本语言,以其简洁的语法、高效的性能和易于嵌入其他系统而著称。它广泛应用于游戏开发、网络编程、系统管理、配置文件以及各种脚本任务。 2. **基础语法**:Lua的基础...

    windows下编译lua

    一、Lua简介 Lua是一种轻量级的脚本语言,广泛应用于游戏开发、嵌入式系统、科学计算等领域。 Lua源代码可以在多种平台上编译和运行,包括Windows、Linux、Mac OS等。 二、下载Lua源代码 在Windows平台下编译Lua...

    demo_Lua开发案例_串口_合宙602lua_AIR800M4Lua开发_合宙_

    1. Lua简介:Lua是一种解释型的、动态类型的、弱类型的、基于原型的、多范式的编程语言,强调可读性和简洁性。它常被用于快速开发嵌入式应用,尤其适合在资源有限的IoT设备上运行。 2. 合宙602lua与AIR800M4Lua:合...

    AndroidLua-master

    1. **Lua简介** Lua是一种轻量级的、解释型的、面向过程的脚本语言,因其简洁的语法和强大的功能而受到欢迎。它的设计目标是易于嵌入到其他应用程序中,提供动态脚本支持。Lua的特性包括:动态类型、垃圾回收、...

    Lua与C/C++交互——C/C++调用Lua脚本

    1. **Lua简介** Lua是一种动态类型的解释型语言,设计目标是作为嵌入式脚本语言,用于扩展应用程序的功能。它的语法简洁明了,易于学习,同时也提供丰富的数据结构和模块化设计,使得编写脚本更为方便。 2. **C/...

    cocos2D-lua 核心编程内置代码

    一、Cocos2d-lua简介 Cocos2d-lua是Cocos2d-x的一个扩展,它允许开发者使用Lua语言进行游戏逻辑编写,相比C++,Lua语法简单,学习曲线平缓,且具备良好的性能。Cocos2d-lua提供了丰富的API,包括场景管理、精灵动画...

    王桂林--lua.pdf

    根据提供的文件信息,本文将对Lua语言的相关知识点进行详细的阐述,包括Lua的简介、环境搭建以及推荐的学习资源等几个方面。 ### 1. 综述 Lua #### 1.1. lua 简介 ##### 1.1.1. 诞生 Lua是一种轻量级的、高效的...

    lua脚本快速入门手册

    1. **LUA简介** LUA由葡萄牙的PUC-Rio大学开发,设计目标是提供一种简洁、易读、易写的编程语言。它的核心设计理念是小而强大,使得LUA能够被轻松地嵌入到其他系统中。 2. **LUA语法基础** - 变量:LUA支持动态...

    lua programming中文版

    Lua简介与特性 - **定义**:Lua是一种轻量级的脚本语言,被广泛应用于游戏开发、Web应用程序、自动化脚本等领域。 - **起源与发展**:Lua最初由巴西的PUC里约热内卢大学的计算机研究人员Roberto Ierusalimschy等人...

    Lua Script

    1. **Lua简介** Lua是一种动态类型的解释型语言,由巴西里约热内卢的Pontifical Catholic University开发。它的设计目标是简单易学,易于嵌入,拥有高效性能。Lua的语法清晰,适合编写配置文件和控制逻辑。 2. **...

    Programming_In_Lua.pdf

    Lua简介与特性 - **定义**: Lua是一种轻量级、高效的脚本语言,被广泛应用于游戏开发、Web应用程序、自动化脚本等领域。 - **起源**: Lua最初由巴西的Pontifical Catholic University of Rio de Janeiro(PUC-Rio)...

    Lua教程中文版

    ### Lua简介 Lua是一种轻量级、高效的脚本语言,它被设计为易于嵌入其他应用程序中,以提供灵活的脚本功能。Lua最初由巴西的PUC里约热内卢大学开发,并在1993年首次发布。其主要特点包括:简单易学、执行效率高、可...

    Lua中文教程(pdf版)

    Lua简介 Lua是一种轻量级的脚本语言,以其简洁、高效的特点被广泛应用于游戏开发、网页服务器脚本、图形用户界面(GUI)构建等多个领域。它的设计目标是成为一个易于嵌入的扩展语言,能够在其他应用程序中作为脚本...

    lua教程.ppt.docx

    #### 一、Lua简介与特性 **Lua** 是一种轻量级的脚本语言,以其高效、简洁而著称,在游戏开发、嵌入式系统等领域有着广泛的应用。以下是Lua的一些主要特点: - **轻量级**:Lua 的核心库很小,仅包含基本的数据...

    Lua脚本语言中文教程.pdf

    #### 一、Lua简介与特点 - **Lua**是一种轻量级、高效的脚本语言,被广泛应用于游戏开发、Web应用程序、自动化脚本等领域。其设计初衷是简单且优雅,这使得Lua在与其他语言集成时能够展现出极大的灵活性。 - **简单...

    Lua5.0中文参考

    #### 一、Lua简介 - **Lua**是一种轻量级、高效的脚本语言,被广泛应用于多种场景中,包括游戏开发、Web应用程序及通用脚本处理等。它的设计目标是简洁且功能强大,能够轻松地嵌入到其他应用程序中,提供灵活的扩展...

    wireshark使用Lua编写dissector

    #### Lua简介 Lua是一种强大、快速、轻量级且易于嵌入的应用程序扩展脚本语言。它支持面向对象编程,并可以预编译以提高加载速度、检测语法错误及保护源代码免受用户更改。Lua在Wireshark中的应用主要体现在...

Global site tag (gtag.js) - Google Analytics