教 程 目 录
Lua教程
Lua是一种基于C编程语言构建的开源语言. Lua在从大型服务器系统到小型移动应用程序的多个平台上具有其价值.本教程涵盖各种主题,从Lua的基础知识到各种应用程序的范围.
Audience
本教程专为所有读者而设计正在寻找学习Lua的起点.它有适合初学者和高级用户的主题.
先决条件
这是一个独立的教程,你应该能够掌握即使您是初学者,也很容易理解这些概念.但是,如果您对使用简单的文本编辑器和命令行有基本的了解,那将会有所帮助.
本文地址:https://itbaoku.cn/tutorial/lua-index.html
相关问答
我今天读了一些关于lua的东西,我想知道那是什么. 我进行了Google和Wikipedia搜索,我了解了这一点,直到他们开始谈论C和API.我仍然不明白. 什么是lua,有没有适合初学者的教程? 解决方案 LUA是C和C ++的脚本语言.它允许使用LUA的更简单的语法,并在您的C/C ++应用程序中执行这些脚本.因此,您不必在每个更改上编译程序,而只需提供新的脚本版本. 对于教程,只需使用Google,您就会发现足够的时间让您在接下来的几天内保持忙碌. 其他解决方案 lua是一种在巴西开发的轻巧解释的编程语言,重点是嵌入. 它是用纯ANSI C编写的,即使作为C ++代码. 这是一个示例: print("Hello World!") 在 官方网站 其他解决方案 我很惊讶每个人都弄错了这个. lua是夏威夷词,厕所" .
)
我的理解是,在LUA 5.2中,环境存储在名为_ENV的upvalues中.这确实使我感到困惑,在运行它之前修改块的环境,但是加载它. 我想将文件加载一些功能,并使用块将这些功能注入各种环境.示例: chunk = loadfile( "file" ) -- Inject chunk's definitions chunk._ENV = someTable -- imaginary syntax chunk( ) chunk._ENV = someOtherTable chunk( ) 这可以从卢阿内部吗?我唯一能找到的修改此upvalue的例子是 with c api (另一个示例),但我试图从lua内部执行此操作.这可能吗? 编辑:我不确定使用调试库接受答案. 编辑:看起来这是不可能的:编辑:我想我这样做的最佳方法是绑定可以修改环境的C函数.尽管这是一种更烦人的方法. 编辑:我相信这样做的一种更自然的方法是将所有块加载到单独的环境中.这些可以通过设置一个涉及块的全球副本来"继承"任何其他环境.这不需要任何upvalue修改后负载,但仍然允许使用这些功能定义的多个环境. 解决方案 允许在不同环境中运行块的最简单方法是使其显式并让其接收环境.在块的顶部添加此行实现了这一点: _ENV=... 现在您可以在您的荣幸中致电chunk(
)
在代码示例中:http://lua-users.org/wiki/SimplerCppBinding 有代码: lua_pushstring(L, T::className); lua_pushvalue(L, methods); lua_settable(L, LUA_GLOBALSINDEX); //
)
根据LUA 5.1手册,lua_xmove在属于同一LUA状态的不同线程的堆栈之间移动值.但是,我偶然碰巧使用它来移动跨不同LUA州的价值,而且似乎效果很好!是否还有其他API可以将值从一个LUA状态转移到另一个LUA状态(以5.1为单位),或者可以使用lua_xmove? 解决方案 LUA将垃圾收集数据存储在全球状态.因此,如果您将GC或字符串对象跨州移动,则可能会混淆垃圾收集器并创建悬空的参考. 所以,虽然看起来像是有效的,但以后可能同样容易引起问题. 有关参考,请参见此邮件列表线程开发人员在讨论这个确切问题的地方. 请注意, lua_xmove 确实检查了全球状态是相同的: api_check(from, G(from) == G(to));
)
我惨烈地未能将嵌套的LUA表转换为C JSON对象.我正在使用luatabletojson(之后请参见此处的代码),其中"索引"是检索和poponeArg的参数索引,并根据其类型来处理一个值. 拥有嵌套表时,我想递归地调用luatabletojson,但是使用索引= -1不起作用. 问题:可以让某人指向工作样本的指向重新嵌套表作为从lua转到C的嵌套表.另外,有人可以解释从lua传递嵌套表的堆栈结构到c. 谢谢 注意:对于c-> lua,我有一个解决方案. STATIC json_object *LuaTableToJson (lua_State* luaState, int index) { int idx; json_object *tableJ= json_object_new_object(); const char *key; char number[3]; lua_pushnil(luaState); // 1st key for (idx=1; lua_next(luaState, index) != 0; idx++) { // uses 'key' (at index -2) and 'value' (at index -1) if (lua_
)
我最近使用5.2来学习,我想尝试这样的方法: 步骤1,为LUA构建C模块: #include "lua.h" #include "lauxlib.h" #include "lualib.h" #include static int add(lua_State *L) { int x = luaL_checkint(L, -2); int y = luaL_checkint(L, -1); lua_pushinteger(L, x + y); return 1; } static const struct luaL_Reg reg_lib[] = { {"add", add} }; int luaopen_tool(lua_State *L) { luaL_newlib(L, reg_lib); lua_setglobal(L, "tool"); return 0; } i编译并将其链接到liblua.a,我确定它在lua脚本中效果很好,例如" require(tool")tool.add(1,2)" 步骤2,我编写了另一个想在这样的步骤1中要求我的C模块的C程序: #include "lua.h" #include "lauxlib.h" #include "lu
)