iT邦幫忙

第 12 屆 iThome 鐵人賽

0
Software Development

30天 Lua重拾筆記系列 第 32

【30天Lua重拾筆記32】進階議題: LuaRocks & LuaDist

  • 分享至 

  • twitterImage
  •  

同步發表於個人網站

LuaRocks

LuaRocks是類似npm、pip這樣的套件管理工具,你可以在上頭找到近4000個別人已經寫好的模組。

下載/安裝LuaRocks

在示例前,你需要先下載安裝好LuaRocks,若要下載其他版本,可以在這個頁面尋找看看。

在Linux上,你只需要將其解壓縮於可執行路徑底下即可。Windows可以參考官方說明

使用LuaRocks

初始化環境

你可以不用做這一步。略過這一不的話,之後安裝得套件會存在於全局裡。有這樣的作法,主要是用於開發其他套件時使用。

mkdir example
cd example
luarocks init

搜尋套件

luarocks search json
###############
# ......
# lua-json
#   0.1.3-1 (rockspec) - https://luarocks.org
#   0.1.3-1 (src) - https://luarocks.org
# ......
###############

下載/安裝套件

luarocks install lua-json

使用套件

模組化提過requirepackage.path有關。其實,還與package.cpath有關。這兩個變數都可以透過環境變數LUA_PATHLUA_CPATH來調整。

LuaRocks提供的半自動化處理的工具:

luarocks path --bin

或是直接使用:

eval $(luarocks path --bin)

不同Lua版本情況下

如果你使用的LuaRocks和當前使用的Lua是不同版本,你可能會需要多加上一個參數:

luarocks --lua-version 5.4

lua-json使用示例

引入lua-json

local json = require 'json'

lua-json符合先前提到過得模組設計慣例,所以也可以直接使用:

require "json"

轉換成JSON字串

object = {
    field = "name"
}


array = {9, 8, 7, 6, 5}

json.encode(object) --> {"field":"name"}
json.encode(array) --> [9,8,7,6,5]

JSON字串轉換為物件

arr = json.decode "[9,8,7,6,5,4]"
for i, v in ipairs(arr) do
  print(i, v) -- 與JS不同的是,Lua陣列從1開始
end


obj = json.decode [[
  {
    "key": "value"
  }
  ]]

for k, v in pairs(obj) do
  print(k, v) --> "key"	"value"
end

※ 更多詳細方法,自行搜尋文件拉~
※ 聽說是有更為高效好用的json相關套件,可以在LuaRocks找找。

LuaDist

If you use Windows, try LuaDist, a multi-platform distribution of the Lua that includes batteries.

LuaDist是官方推薦Windows下使用的一種環境。我先假設你已經安裝好了LuaDist,而LuaDist可以替你安裝Lua、LuaRocks和Lua的套件。

安裝Lua

luadist . install lua

這會將lua安裝於當前目錄,你可以透過./bin/lua執行:

./bin/lua

當前目錄結構:

  • bin
  • include
  • lib
  • share
  • tmp

安裝LuaRocks

與安裝Lua類似

luadist . install luarocks

安裝luajson

luadist . install luajson

基本上使用方式與LuaRocks安裝後使用相同。不過我自己是Linux環境,還有更多東西要處理......也就是在Linux上使用上是有些困難的,這也是我放於最後才介紹這個工具的原因之一。

參考資料


上一篇
【30天Lua重拾筆記31】進階議題: 記憶體回收&弱表
下一篇
30天Lua重拾筆記33】Java + Lua計算機
系列文
30天 Lua重拾筆記36
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言