Lua 在 Free Pascal 中

lua-users home
wiki

[Free Pascal] 是一款廣受支持的 Pascal 編譯器,可使用於多種平台。

在 Lua 5.1 參考手冊中提到的 C API 和輔助函式庫中的所有例程都可在 Free Pascal 2.4 的 lualualiblauxlib 函式庫中找到。對於 Lua 5.2 和更新版本,請參閱以下章節。雖然沒有說明文件,但您可以使用 Lua 手冊,因為呼叫序列幾乎完全相同,只有少數例外。

若要在 Free Pascal 中將字串拆成多行,請建立多個透過 '+' 運算子串接的字串常數。或者,您可以將您的 Lua 程式碼儲存在檔案中,或將其全部放在一行中。

類型名稱

luaL_Reg    => lua_CFunction
大部分都顯而易見,例如使用 P 表示指標,例如
luaState*   => Plua_State
或標準,例如
void*       => Pointer
int         => Integer
您總是可以在 Ubuntu 上檢視 lauxlib.pas 等的介面(套件組 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 月以來,PCharString 在 Free Pascal 中已作為 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 (差異)