上一回分享的是,Lua 变数型别与宣告
今天主题则是 Lua 内建的标准函式库,先看上次相同的程序码:
motd.lua
local date = os.date("*t")
if date.month == 1 and date.day == 1 then
print("Happy new year!")
elseif date.month == 12 and date.day == 24 then
print("Merry X-mas!")
elseif date.month == 10 and date.day == 31 then
print("OOoooOOOoooo! Spooky!")
else
local tMotd = {}
for sPath in string.gmatch(settings.get("motd.path"), "[^:]+") do
if fs.exists(sPath) then
for sLine in io.lines(sPath) do
table.insert(tMotd, sLine)
end
end
end
if #tMotd == 0 then
print("missingno")
else
print(tMotd[math.random(1, #tMotd)])
end
end
在这里所看到的,os
, string
, io
, table
, math
都是内建的标准函式库,此外还有 coroutine
, package
, utf8
, debug
而事实上,我一直使用的 print()
, tonumber()
, tostring()
, type()
则都是属於 Basic 函式库
以下会针对上述用到的函数做简介
os.date("*t")
是回传一个 table 变数,有 year、month、day 等属性可供操作
如果没有给 *t 参数,预设是回传当前日期时间的字串表示
os.time()
则是回传 timestamp
其他 os function 可参考官方文件
var = os.date("*t")
print(type(var)) -- table
print(var) -- table: 0x2188870
var = os.date()
print(type(var)) -- string
print(var) -- Tue Sep 14 04:25:20 2021
var = os.time()
print(type(var)) -- number
print(var) -- 1631589920
io 用来处理档案的存取
io.lines
是读取档案後,回传 iterator 函数,以便可以在回圈中逐一读取每一行资料
其他 function 可参考 Lua io 官方文件
table.insert
的语法结构是
table.insert(list, [pos,] value)
预设行为是将 value 存入 list 的最後一笔
中间 pos 是 index,但注意从 1 开始,跟其他语言从 0 开始不同,可省略
其他 function 可参考 Lua table 官方文件
math.random()
则回传 0~1 的随机数,范围是 [0,1)
和其他语言比较不同的是
math.random(5)
等同於 math.random(1, 5)
,只回传 1, 2, 3, 4, 5 任何一个整数
其他 math function 可参考 Lua math 官方文件
gmatch()
会以规则运算式来比对字串,并回传 iterator 函数,来取得每次符合的子字串
以下程序码就是将除了冒号以外的字串找出来
string.gmatch(settings.get("motd.path"), "[^:]+")
关於可运用的规则运算式,可参考 Lua regular expression pattern
其他 string function 可参考 Lua string 官方文件
那我有个问题,为什麽是冒号?不是分号、逗号或其它字元呢?
我再次用 motd.path 去搜寻 rom/ 所有程序码
找到 bios.lua 有这麽一段
settings.define("motd.path", {
default = "/rom/motd.txt:/motd.txt",
description = [[The path to load random messages from. Should be a colon (":") separated string of file paths.]],
type = "string",
})
看起来,电脑预设行为是从 /rom/motd.txt 和 /motd.txt 随机找一行来显示开机讯息
你只要先清除之前的 motd.path 环境变数
在麦块电脑底下输入
set motd.path nil
然後编辑 /motd.txt 内容後多次重新开机,就可以印证。
以上是今天的分享,下次我会探索这段 Code 最後一部分
条件判断与回圈控制
<<: Day.13 Crash Recovery - InnoDB 架构 -> MYSQL 二阶段提交(2PC) _1
今天的内容 一、图文资讯元件 二、ICON: Webfont & SVG 三、通知讯息元件 ...
想先看 Code 或是 Demo 的由此去 Github Repo: ithelp-ui-demo...
好久没有更新了,最近比较忙,不过今天遇到一个很有意思的问题,就过来记录一下。 通过正则表达式匹配文本...
上回介绍闭包概念以及闭包大致运用,这次则介绍实做比较常用闭包的几种模式 工厂模式 上个章节有介绍到,...
前面花了点时间介绍了 MVC,今天终於要进入正题啦! 我会以一个电玩专卖店的购物网站为主题,并且从後...