Lua 在 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.

最近更改 · 偏好设置
编辑 · 历史记录
最后编辑于 2017 年 4 月 24 日下午 5:56 GMT (差异)