《Programming in Lua》学习总结

之前写了一篇,居然误操作删除了,由于只保存了草稿,在百度上找不到快照,也找不到恢复的地方,只能再写一篇。这个误操作也是csdn不完善的地方,我本来想点【编辑】,错点到旁边的【删除】,于是我就按住鼠标不动,拖到其他地方,以为就不会触发删除了,结果这样做正好躲过了csdn的删除确认框,直接给删除了,当时我就惊呆了!不过幸好上一篇写了也就10来行,我就在重写一篇,正好lua没有看完,边看边复习了!

赋值操作Lua支持“一赋多值”,就在一个赋值语句中可以赋多个值。如:a, b = 10, 2*x而且由于Lua是先计算赋值语句右侧所有表达式的值,再进行赋值了,所以Lua可以利用这个特点,完成两个变量间的值交换。如:x, y = y, x — swap ‘x’ for ‘y’a[i], a[j] = a[j], a[i] — swap ‘a[i]’ for ‘a[j]’数组Lua中用 table 数据结构实现数组功能。如:myTable = { 5, 4, 3, 2, 1 }myTable[ 1 ] –>5myTable[ 2 ] –>4myTable[ 3 ] –>3myTable[ 4 ] –>2myTable[ 5 ] –>1通过在构造列表中,排列出所有元素,将 table 初始化成一个数组。唯一需要注意的是:Lua中数组的索引习惯性从1开始。也就是默认构造的数组,第一个元素的索引是1,不是0。数组的本质其实还是将 table 的数值类型键用于数组。C Module使用windows的dll可以实现Lua C Module,之后可以通过使用 require “libname" 加载该 C Module。使用其中的函数。需要注意两点:lua打开一个C Module 的时候会调用其中luaopen_xxx函数,所以 C Module 需要将这个函数导出,其他的函数就不用管了,地址已经记录在 C Module 的导出表里了。包含lua SDK的文件的时候,,使用 extern ”C" 括起来。因为lua5.1.lib,dll是C方式编译的,也就是函数名称没有被C++修饰过。所以为了在C++中能找到这个函数,需要通过extern “C" 来表示,这些函数不要用C++方式进行修饰,这样C++编译器就不会修饰这些函数名称了,就和lua.5.1.lib中函数名对应起来了。test_lua_lib.cppextern "C"{#include "lua.h"#include "lauxlib.h"#include "lualib.h"};#pragma comment( lib, "lua51.lib" )#include <string>int ConvertTableToString( lua_State* pLua ){std::string strBuffer;lua_pushnil( pLua );while( 0 != lua_next( pLua, 1 ) ){const char* pszKey = lua_tostring( pLua, -2 );const char* pszValue = lua_tostring( pLua, -1 );if( pszKey && pszValue ){strBuffer += pszKey;strBuffer += " = ";strBuffer += pszValue;strBuffer += "\n";}lua_pop( pLua, 1 );}lua_pushlstring( pLua, strBuffer.c_str(), strBuffer.length() );return 1;}static luaL_Reg s_Functions[] = {{ "ConvertTableToString", &ConvertTableToString },{ NULL, NULL }, };extern "C" _declspec( dllexport ) int luaopen_test_lua_lib( lua_State* pLua ){luaL_register( pLua, "CModule", s_Functions );return 1;}将此dll放入,Lua 5.1\clibs\ 目录下,然后打开lua.exe,在命令行中输入cmd:Lua 5.1.4 Copyright (C) 1994-2008 Lua.org, PUC-Rio> myTable = { x = 100, y = 200 }> require "test_lua_lib"> strTest = CModule.ConvertTableToString( myTable )> =strTesty = 200x = 100>

同生天地间,为何我不能。

《Programming in Lua》学习总结

相关文章:

你感兴趣的文章:

标签云: