Lua 在 Free Pascal 中 |
|
在 Lua 5.1 參考手冊中提到的 C API 和輔助函式庫中的所有例程都可在 Free Pascal 2.4 的 lua
、lualib
或 lauxlib
函式庫中找到。對於 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.
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 月以來,PChar
和 String
在 Free Pascal 中已作為 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_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.