Lua学习笔记

摘要:
按F5,如果SciTE的输出窗口出现˃lua-e"io.stdout:setvbuf'no'""hello.lua"hello,lua˃Exitcode:0字样则代表整个lua开发环境安装成功。file=/ldt/products/stable/1.3.1/org.eclipse.ldt.product-win32.win32.x86_64.zip&mirror_id=13、visualstudio中使用Lua如果你是个C/C++程序员,用的是VS。选择“Tools(工具)”--˃“Options(选项)”--˃“ProjectsandSolutions”--˃“VC++Directories”。

1、Lua开发工具(lua for windows)详解及其环境配置

Lua开发工具(lua for window)及其环境配置是本文要介绍的内容,主要是来了解并学习lua开发工具的使用和环境的配置.

lua for window 下载地址:http://luaforwindows.luaforge.net/

它包括:
Lua Interpreter(Lua解释器)
Lua Reference Manual(Lua参考手册)
Quick Lua Tour (Lua快速入门)
Examples (Lua范例)
Libraries with documentation (一些Lua库和文档)
SciTE (一个很棒的多用途编辑器,已经对Lua做了特殊设置)

下载后直接安装就可以使用了。

2、验证安装Lua开发环境

打开SciTE,新建一个文件,输入一行lua代码:

print("hello,lua")

然后保存为hello.lua,注意保存文件时要加文件名后缀.lua,否则可能不能正确的运行。

按F5,如果SciTE的输出窗口出现

>lua -e "io.stdout:setvbuf 'no'" "hello.lua"
hello,lua >Exit code: 0

字样则代表整个lua开发环境安装成功。

2、eclipse

下载地址:http://www.eclipse.org/ldt/

中的http://www.eclipse.org/downloads/download.php?file=/ldt/products/stable/1.3.1/org.eclipse.ldt.product-win32.win32.x86_64.zip&mirror_id=1

3、visual studio中使用Lua

如果你是个C/C++程序员,用的是VS。本人用的是VS2008。

选择“Tools(工具)”-->“Options(选项)”-->“Projects and Solutions(项目和解决方案)”-->“VC++ Directories(C++目录)”。

(1)在右边的“Show Directories for(显示目录)”中的下拉菜单中选择“Include Files(包含文件)”,然后在下面添加一个新路径"C:Program Fileslua5.1include"。

(2)在右边的“Show Directories for(显示目录)”中的下拉菜单中选择“Library Files(包含文件)”,然后在下面添加一个新路径"C:Program Fileslua5.1lib“。

注意:C:Program Fileslua是lua for windows 的安装路径

OK,VS的配置结束。

4、来试试我们第一个LUA应用。(用的是c++)

1)、创建一个新的空Win32控制台应用工程。

2)、将"luatest.cpp"加入你的工程。

3)、选择项目菜单中的属性菜单。

4)、在"连接器"的"输入"栏目的"附加依赖项"中输入"lua5.1.lib"。

5)、完成。

如何编写test.lua脚本文件? 如下:

print(“hello, lua!”)

如何编写luatest.cpp?如下:

#include <stdio.h>
extern "C" {
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
}

/* Lua解释器指针 */
lua_State* L;
int main ( int argc, char *argv[] )
{
/* 初始化 Lua */
L = lua_open();
/* 载入Lua基本库 */
luaL_openlibs(L);
/* 运行脚本 */
luaL_dofile(L, "test.lua的绝对路径");
/* 清除Lua */
lua_close(L);
/* 暂停 */
printf( "Press enter to exit…" );
getchar();
return 0;
}

运行输出:
print ("hello, lua!")

学习笔记 二

1、Lua与c++交互之C++调用Lua
注意点:
1)、extern "C"
2)、luaL_openlibs(L)
3)、luaL_dofile(L, "test.lua")

#include <stdio.h>

extern "C" {
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
}

/* the Lua interpreter */
lua_State* L;

int luaadd ( int x, int y )
{
int sum;

/* the function name */
lua_getglobal(L, "add");

/* the first argument */
lua_pushnumber(L, x);

/* the second argument */
lua_pushnumber(L, y);

/* call the function with 2
arguments, return 1 result */
//说明调用的函数是带有2个参数和1个返回值
lua_call(L, 2, 1);

/* get the result */
sum = (int)lua_tonumber(L, -1);
lua_pop(L, 1);

return sum;
}

int main(int argc, char **argv)
{
int sum;

/* initialize Lua */
L = lua_open();
luaopen_base(L);

/* load Lua base libraries */
luaL_openlibs(L);

/* load the script */
luaL_dofile(L, "script/test.lua");

/* call the add function */
sum = luaadd( 10, 15 );

/* print the result */
printf( "The sum is %d ", sum );

/* cleanup Lua */
lua_close(L);

printf( "Press enter to exit…" );
getchar();
return 0;
}

2、Lua与c++交互之Lua调用C++

在lua中是以函数指针的形式调用函数, 并且所有的函数指针都必须满足如下此种类型:
typedef int (*lua_CFunction) (lua_State *L);  
也就是说, 我们在C++中定义函数时必须以lua_State为参数, 以int为返回值才能被Lua所调用. 但是不要忘记了, lua_State是支持栈的, 所以通过栈可以传递无穷个参数, 大小只受内存大小限制. 而返回的int值也只是指返回值的个数.真正的返回值都存储在lua_State的栈中. 我们通常的做法是做一个wrapper, 把所有需要调用的函数都wrap一下, 这样就可以调用任意的函数了.

注意点:

1)、lua中调用:get_sum(10, 20, 30, 40, 50,100);

2)、int get_sum(lua_State *L)

Lua是按照 __fastcall 的规则传递参数的,也就是从左到右一个个传。
Lua压栈的顺序是:首先将函数压栈,然后将参数压栈。执行完毕后,将参数和函数都出栈,然后将返回值按顺序压栈。

3)、函数体编写完,将该函数进行注册 lua_register( L, "get_sum", get_sum);

#include <stdio.h>

extern "C" {
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
}

/* the Lua interpreter */
lua_State* L;

static int get_sum(lua_State *L)
{
//返回栈中元素的个数
int n = lua_gettop(L);
double sum = 0;
int i;
for (i = 1; i <= n; i++)
{
if (!lua_isnumber(L, i))
{
lua_pushstring(L, "Incorrect argument to 'sum'");
lua_error(L);
}
sum += lua_tonumber(L, i);
}
/* push the sum */
lua_pushnumber(L, sum);
return 1;
}

int main(int argc, char **argv)
{
/* initialize Lua */
L = lua_open();
luaopen_base(L);

/* load Lua base libraries */
luaL_openlibs(L);

lua_register(L, "get_sum", get_sum);
/* load the script */
/*Lua01.lua是这个C++程序调用的Lua文件*/
luaL_dofile(L, "script/test.lua");

/* print the result */
lua_getglobal(L,"sum");
printf("sum is: %d ", lua_tointeger(L,-1));

/* cleanup Lua */
lua_close(L);

printf( "Press enter to exit…" );
getchar();
return 0;
}

免责声明:文章转载自《Lua学习笔记》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇#ifndef/#define/#endif使用(转载)浏览器对象存储数据详解下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

LUA-点号和冒号

由于LUA中是模拟类,没有class, 所以这里是使用.号来访问实例的成员 re.SetActive(re, re.activeSelf == false); 而冒号:  则是种语法糖,省略了上面代码中的第一个参数 re:SetActive(re.activeSelf == false); 也就是说:lua中对象.方法,只能找到方法,对象只能是类型,即使传...

OneinStack——PHP多版本共存

前言 我事先安装的是LNMP环境,PHP版本为7.2,但是现在环境需要一个PHP5.6,所以就准备安装个上版本,顺带写个安装教程,写完后我发现了原来有直接安装的命令!所以后面的内容大家可以忽略了!从配置nginx文件看就好了! ./oneinstack/install.sh –mphp_ver 56 详细参数 version: 2.0 updated...

python2--升级python3

先安装开发工具包:   yum -y group install "Development Tools" 安装Python的依赖包:   yum -y install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel vim  下载最新的Python包:...

lua require路径设置实例

1.首先要强调的是,lua require的路径用的是斜杠"/",而不是从Windows文件属性那里复制来的反斜杠""。2.通过 print(pagckage.path) 和print(package.cpath)打印lua系统封装的两个全局属性可以看到当前lua解析器require的时候默认替换的路径3.更改路径的时候,lua脚本加  ";..\?.lu...

自然语言处理入门 何晗 读书笔记 第1章 新手上路

第1章新手上路 自然语言处理是一门融合了计算机科学、人工智能以及语言学的交叉学科。这门学科研究的是如何通过机器学习等技术,让计算机学会处理人类语言,乃至实现终极目标----理解人类语言或人工智能。 自然语言处理这个术语没有被广泛的定义,注重语言学结构的学者喜欢使用计算语言学(CL),强调最终目的的学者更偏好自然语言理解(NLU)。 1.1自然语言与编程语言...

GO 解决使用bee工具,报 bash: bee: command not found

我最近使用beego时,遇到以下问题:command not found使用vscode时,运行bee run,报以下错  我查到一篇文章csdn,说用拷贝bee.exe方法,我觉得纯扯淡 如何解决? 通常这种情况常在windows出现,苹果还没遇到这个问题,会出现这个问题的环境,往往修改过GOPATH。例如Go 的msi安装是默认会把环境变量配置好,但...