Lua 在 Free Pascal 中 |
|
Free Pascal 2.4 的 lua
、lualib
或 lauxlib
库支持 Lua 5.1 参考手册中提到的所有来自 C API 和辅助库的例程。对于 Lua 5.2 及更高版本,请参阅以下部分。没有文档,但您可以使用 Lua 手册,因为调用序列基本相同,只有少数例外。
为了在 Free Pascal 中将字符串拆分为多行,请创建多个字符串常量,这些常量通过“+”运算符连接起来。或者,您可以将 Lua 代码存储在文件中,或者将所有代码放在一行中。
luaL_Reg => lua_CFunction大多数其他类型都很明显,使用 P 表示指针,例如
luaState* => Plua_State或标准类型,例如
void* => Pointer int => Integer您始终可以查看
lauxlib.pas
等的接口(Ubuntu 上的 fpc-source
包)以确保。
一些以 lua_L
开头的名称不同(可能是拼写错误)
luaL_dofile => lua_dofile luaL_dostring => lua_dostring luaL_getmetatable => lua_Lgetmetatable
uses lua, lualib, lauxlib; var L: Plua_State; result: integer; begin L := lua_open(); luaL_openlibs(L); result := lua_dostring(L, 'for k in string.gmatch("a,b,c,d,e,f,g,h","([^,]+),") do print(k) end' ); lua_close(L); end.
Pascal 源代码
] 并将其保存为 lua52.pas
。
LUA_LIB_NAME
的行更改为您的系统 Lua 5.2 共享库的名称。一些可能的名称是 lua52.dll
(Windows)、liblua5.2.so
(Debian、Ubuntu 等)和 liblua.so.5.2
(Red Hat、Fedora 等)。
此符合 Lua 5.2 的更新由 Egor Skriptunoff 完成。Vladimir Klimov 添加了一些进一步的改进,包括 Delphi 兼容性。有关完整详细信息,请参阅 lua52.pas
开头的注释。此处版本于 2013 年 5 月 1 日上传。一个更新的版本(2014 年 3 月 1 日)主要进行了美观上的更改,但上传尝试迄今为止失败了。
请注意,自 2009 年 12 月起,Free Pascal 中的 PChar
和 String
已实现为 Unicode。为了保持 Lua 兼容性,现在使用 PAnsiChar
和 AnsiString
类型。
只需要一个 lua52
单位,而不是三个单位。一个最小的使用示例是
uses lua52; (* 5.2 change *) var L: Plua_State; result: integer; begin L := luaL_newstate(); (* 5.2 change *) luaL_openlibs(L); result := luaL_dostring(L, 'print (unpack,table.unpack)'); lua_close(L); end.
Pascal 源代码
] 并将其保存为 lua53.pas
。
此符合 Lua 5.3 的更新由 `Malcome@Japan` 为 Lazarus 完成 https://github.com/malcome/Lua4Lazarus。Dirk Laurie 对其进行了一些小的更改,使其能够在 Free Pascal 2.6.2 下运行。有关完整详细信息,请参见 `lua53.pas` 开头的注释。
如果包含 `dynlibs` 单位,则无需进行这些更改。在 https://github.com/malcome/Lua4Lazarus 上的原始版本被发现与 Free Pascal 3.0.0(2017 年初的当前稳定版本)完美兼容。
只需要一个单位 `lua53`,而不是三个单位。一个最小的使用示例是
uses lua53, dynlibs; var L: Plua_State; result: integer; begin L := luaL_newstate(); luaL_openlibs(L); result := luaL_dostring(L, 'print ("`H�l�ne` has "..utf8.len"H�l�ne".." UTF8 characters.")'); lua_close(L); end.