【30天Lua重拾笔记32】进阶议题: LuaRocks & LuaDist

同步发表於个人网站

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上使用上是有些困难的,这也是我放於最後才介绍这个工具的原因之一。

参考资料


<<:  I Want To Know React - 中场休息

>>:  玩转 Storybook: Day 30 总结 & 学习资源

第5章:取得指令使用说明帮助方法

前言 在上一章节中,学会了基本的档案与目录之管理以及档案系统的目录架构之後,在这个章节中,要教导如何...

Day 17 - Applicative

Introduction Type Signature of :: Applicative f =&...

企划实现(17)

跳转到IG、youtube 常常会看到许多程序有一个可以跳转到他们自己的ig、youtube的功能,...

Day14 - 机智接案生活

看过很多文章提到程序设计师接案的陷阱,因自己非本科出身,所以觉得这些陷阱都不会发生在自己身上,再加上...

08 - Metrics - 观察系统的健康指标 (2/6) - 使用 Metricbeat 掌握 Elastic Stack 的健康状态

Metrics - 观察系统的健康指标 系列文章 (1/6) - Metrics 与 Metricb...