上一回,我有了好的 Lua 开发工具,可以研究 CC: Tweaked 的程序码
今天,我重新以 CC: Tweaked Computer 开机相关的程序码,来学习 Lua 语言特性
开机显示 Message Of The Day 的程序码如下
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
首先看到 local
关键字,为何要特别宣告 local 呢?
因为 Lua 变数宣告预设是全域范围,参考范例:
function showTitle()
title = 'ironman'
end
showTitle()
print(title)
上述程序码会印出 ironman,即使 title 变数是在 function 内部宣告,在 function 外部仍然可见
用 local 定义变数范围是区域後,可避免变数污染的问题
如果 title 的宣告加上 local
,则最後只会输出 nil
接着可以发现,Lua 的变数宣告是没有型别的
事实上,Lua 变数是弱型别,其型别由值决定
以下给出 Lua 的 7 种型别,并用 type()
显示其真正型别
var = nil
print(type(var)) -- nil,变数预设值,变数未经宣告直接取值也是 nil
var = true
print(type(var)) -- boolean
var = 30
print(type(var)) -- number
var = 'ironman'
print(type(var)) -- string,可以用单引号说双引号
var = function (n) return n*2 end
print(type(var)) -- function
var = coroutine.create(function() print("Hello, ironman") end)
print(type(var)) -- thread
var = {}
print(type(var)) -- table
还有第 8 种型别是 userdata,据了解是和其他语言互动用的
我自己还未熟悉
你可以用 tostring()
, tonumber()
来将字串、数字转型
var = tostring(2021)
print(type(var))
var = tonumber('2021')
print(type(var))
或是用运算子自动转型
使用 + 会自动转型成 number
使用 .. 会自动转型成 string
以下都是输出 2021
var = 20 .. 21
print(var)
var = 2020 + '1'
print(var)
以下是分别在麦块电脑上,以及本机的 Lua 互动介面测试
可以看到,Lua 指令其实可以写在同一行
当然这通常不是一个好的风格
以上是关於 Lua 变数的分享
下次我仍会围绕在同一段 Code,持续的带大家了解 Lua 语言特性~
前言 就如同标题所讲的,今天就来自由练习吧。那今天我练习的主要会是在骨架的部分。对,过了这麽久依旧在...
未完待续的前端之旅 在这30天我们带到了前端技能树上各种类型的技能,包括基本的 HTML、CSS、J...
快取的重要性 我们知道不论是聚簇索引或是二级索引,资料都是储存在表格空间,而表格空间其实只是个抽象概...
tags: tags: 2021IT 了解随机性 从整体上观察矩阵(集合)中的物件分布与矩阵整体的关...
第一次参加铁人赛,感谢杨适豪的邀请 先来设定30天的大纲吧 前言 目标定义 - 我的动作游戏是什麽?...