Lua In Free Pascal

lua-users home
wiki

[Free Pascal] 是一个支持良好的 Pascal 编译器,可在多种平台上使用。

Free Pascal 2.4 的 lualualiblauxlib 库支持 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.

Lua 5.2 更新

1. 下载单元的[Pascal 源代码]并将其保存为 lua52.pas
2. 更改定义 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 中的 PCharString 已实现为 Unicode。为保持 Lua 兼容性,现已使用 PAnsiCharAnsiString 类型。

只需要一个单元 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.

Lua 5.3 更新

1. 下载单元的[Pascal 源代码]并将其保存为 lua53.pas
2. 更改定义 LUA_LIB_NAME 的行,使其指向你系统的 Lua 5.3 共享库。一些可能的名称包括 lua53.dll (Windows)、liblua5.3.so (Debian, Ubuntu 等) 和 liblua.so.5.3 (Red Hat, Fedora 等)。在某些系统上,可能存在指向该文件的多个别名。如果第一个名称不起作用,请尝试另一个。

此符合 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.

RecentChanges · preferences
编辑 · 历史
最后编辑于 2017 年 4 月 24 日上午 11:56 GMT (差异)